MySQL Workbench
 sql >> Base de données >  >> Database Tools >> MySQL Workbench

La requête SQL fonctionne dans Workbench mais obtient l'erreur "Impossible de convertir le type de variante" avec exactement la même requête dans Delphi

D'accord avec le commentaire de SirRufo ici. La bonne réponse à "comment puis-je faire cela ?" est "ne fais pas ça ; ce n'est pas la bonne façon de faire."

Si vous collez des valeurs directement dans la requête comme ça, les pirates peuvent trouver un moyen de placer des éléments dans votre requête qui sont interprétés comme Commandes SQL. Ceci est connu sous le nom d'injection SQL , et il a été responsable de milliards de dollars de dégâts au cours des dernières décennies. (Sans exagérer.)

La bonne façon de le faire est de séparer proprement votre code SQL de vos données, en utilisant des paramètres, comme ça :

ADOQuery1.SQL.Clear;

//: before an identifier specifies a parameter
ADOQuery1.SQL.Add('SELECT tbl.emailAddress, tbljob.Time FROM '+
  'dbwindowwash.tblclient, dbwindowwash.tbljob, dbwindowash.tbljobclientworker '+
  'WHERE tbljobclientworker.jobID = tbljob.jobID AND '+
  'tbljobclientworker.clientID = tblclient.clientID AND tbljob.Date = :date';

//parse the query and find parameter declarations
ADOQuery1.Prepare;

//set a value for the parameter
ADOQuery1.ParamByName['date'].AsDateTime := TodaysDate;

ADOQuery1.Open

La syntaxe exacte pour définir la valeur d'un paramètre peut différer d'un type de jeu de données à l'autre, mais cela devrait vous donner une idée de base.