Difficulté pour créer une requete SQL

[Résolu]
Signaler
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Bonjour à tous.

Voici comment est organisé ma table :

Nom de la table : Utilisateurs
Champs : Nom, Prénom,email (tous des alpha-numérique)

Je souhaite écrite une requete qui cherche tous les noms entrés dans un composant TEdit.

Voila donc ce que j'écris :

Query1.Add('SELECT Nom');
Query1.Add('FROM Utilisateurs');
Query1.Add('WHERE Nom=Edit1.Text');
Query1.Active:=True;

Le programme passe à la compilation, mais à l'exécution, j'ai une erreur : "utilisation incorrecte du mots clé WHERE".

J'imagine qu'il y a une erreur de syntaxe dans la requete, mais je vois pas où (je débute :I).

A+ et merci.

5 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Bonjour John,

En fait, les chaines de caractères doivent être délimitées dans une requête SQL. Cela se comprend aisément si l'on pense qu'une chaine peut contenir des espaces. Comment l'analyseur du moteur SQL pourrait-il deviner où se termine une chaine ?

//Suppression des espaces de début et de fin
Edit1.Text := Trim(Edit1.Text);
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('SELECT Nom');
Query1.Sql.Add('FROM Utilisateurs');
//Pour une recherche à l'intérieur du champ
Query1.Sql.Add('WHERE Nom LIKE ' + QuotedStr('%' + Edit1.Text +'%'));
//pour une recherche exacte (plus rapide):
//Query1.Sql.Add('WHERE Nom = ' + QuotedStr(Edit1.Text));
Query1.Active:=True;


L'emploi de la fonction QuotedStr n'est pas obligatoire mais sécurise grandement la requête. Si on ne l'emploie pas, on prend le risque qu'un utilisateur glisse un guillemet ou un caractère apostrophe dans sa saisie et le moteur SQL sera alors incapable d'interpréter la requête et renverra une erreur.
C'est pour cela qu'il vaut mieux éviter la notation suivante :

Query1.Add('WHERE Nom LIKE "' + Edit1.Text + '"');
May Delphi be with you
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

C'est exacetement ce que je voulais...

Merci !
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Une requête est terminée quand le programme reprend son cours normal.
Si tu veux vraiment visualiser quand la requête est terminée, alors tu peux changer la forme du curseur de la souris avec un code basique comme celui-ci quand tu estimes que la requête à exécuter risque de prendre du temps :
var
  OldCur : TCursor;
begin
  OldCur := Screen.Cursor;
  Screen.Cursor := crSqlWait;
  //le code de la requête...
  Screen.Cursor := OldCur;
end;

May Delphi be with you
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

J'ai une autre question :) ...

Est'il possible de savoir quand une l'exécution d'une requète SQL est terminée ?
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

D'accord ...

Merci de ta réponse.

A+