Modification de la requête SQL à l'exécution.
Requêtes paramétrées SQL.


dernière mise à jour : samedi 15 décembre 2001
Retour au sommaire

Reprenons l'exemple du chapitre portant sur le SQL.

Nous avions donner l'exemple de requête :

SELECT client FROM mouvements WHERE livreemprunte="Delphi2"
Cette requête est fixée en dur dans le programme. Il serait souhaitable de pouvoir permettre par exemple à l'utilisateur de rentrer le nom du livre recherché dans un Edit.

 

Solution pour adapter la requête SQL à une entrée utilisateur sans utiliser les requêtes SQL paramétrées.

Une des solutions, est de lire par exemple un Edit puis de fabriquer une nouvelle requête SQL par un simple traitement de chaîne de caractère du type :

  DataModule2.Query1.SQL.Add( 'SELECT * FROM mouvements');
  DataModule2.Query1.SQL.Add ('WHERE Upper(LivreEmprunte) LIKE "'+UpperCase(Edit1.Text) +'%"');

Cette requête affichera les enregistrements de la table mouvements dont le contenu de Edit1.Text mis en majuscule sera égal au début du champ LivreEmprunte mis en majuscule. Concrétement, si Edit1.Text vaut "delphi", la dernière ligne de la requête SQL contenu dans Query1.SQL vaudra :

  WHERE Upper(LivreEmprunte) LIKE "delphi%");

Par conséquent, les livres Delphi 1, Delphi2 etc seront affichés.

Pour tester cet exemple, partez de l'exemple que vous avez construit au chapitre portant sur le SQL. Ajoutez un bouton sur la fiche puis implémentez son événement OnClick comme suit :

procedure TForm1.Button1Click(Sender: TObject);
begin
  DataModule2.Query1.Active:=False;
  DataModule2.Query1.SQL.Clear;
  DataModule2.Query1.SQL.Add( 'SELECT * FROM mouvements');
  DataModule2.Query1.SQL.Add ('WHERE   upper(LivreEmprunte) LIKE "'+UpperCase(Edit1.Text) +'%"');
  DataModule2.Query1.Active:=True;
end;

 

Utilisation des requêtes paramétrées.

Nous allons rentrer, dans la propriété SQL de notre Query, une requête contenant un paramètre. Il suffira de modifier le contenu de ce paramètre pour avoir une requête adaptée à l'entré d'une valeur dans un Edit.

La première chose à faire est de rajouter un paramètre dans la liste des paramètres de notre Query. Ce paramètre pourra alors être utilisé dans une requête SQL.

SELECT *
FROM mouvements
WHERE Upper(LivreEmprunte) LIKE :ParamNomLivre

Notez les points (:) devant ParamLivre. En SQL, cela indique que ce qui suit est un paramètre. SQL remplacera, avant d'effectuer la requête, :ParamNomLivre par le contenu de ce paramètre.

Notre programme n'aura plus qu'à s'occuper de changer la valeur du paramètre ParamLivre (atteignable par Quey1.Param[0] ) pour faire varier la requête SQL.

procedure TForm1.Button2Click(Sender: TObject);
begin
  DataModule2.Query1.Active:=False;
  DataModule2.Query1.Params[0].AsString :=UpperCase(Edit1.Text)+'%';
  DataModule2.Query1.Active:=True;
end;

Sources du programme


Leçon suivante

Retour au sommaire