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

Die SQL-Abfrage funktioniert in Workbench, aber es wird der Fehler „Variantentyp konnte nicht konvertiert werden“ mit genau derselben Abfrage in Delphi angezeigt

Stimme SirRufos Kommentar hier zu. Die richtige Antwort auf "Wie mache ich das?" ist "Tu das nicht; das ist der falsche Weg."

Wenn Sie Werte direkt in die Abfrage einfügen, können Hacker einen Weg finden, Dinge in Ihre Abfrage einzufügen, die als interpretiert werden SQL-Befehle. Dies wird als SQL-Injection bezeichnet , und es war in den letzten Jahrzehnten für Schäden in Milliardenhöhe verantwortlich. (Nicht übertreiben.)

Der richtige Weg, dies zu tun, besteht darin, Ihren SQL-Code sauber von Ihren Daten zu trennen, indem Sie Parameter verwenden etwa so:

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

Die genaue Syntax zum Festlegen des Werts eines Parameters kann sich von einem Datensatztyp zum anderen unterscheiden, aber das sollte Ihnen die Grundidee vermitteln.