MySQL Workbench
 sql >> Database >  >> Database Tools >> MySQL Workbench

SQL Query funziona in Workbench ma ottiene l'errore "Impossibile convertire il tipo di variante" con la stessa identica query in Delphi

D'accordo con il commento di SirRufo qui. La risposta corretta a "come faccio a farlo?" è "non farlo; è il modo sbagliato di farlo".

Se inserisci i valori direttamente nella query in questo modo, gli hacker possono trovare un modo per inserire nella query elementi che vengono interpretati come Comandi SQL. Questo è noto come Iniezione SQL , ed è stato responsabile di miliardi di dollari di danni negli ultimi decenni. (Non esagero.)

Il modo giusto per farlo è separare in modo netto il codice SQL dai dati, utilizzando i parametri così:

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

L'esatta sintassi su come impostare il valore di un parametro può differire da un tipo di set di dati all'altro, ma questo dovrebbe darti un'idea di base.