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

SQL Query fungerar i Workbench men får felet "Kunde inte konvertera varianttyp" med exakt samma fråga i Delphi

Håller med om SirRufos kommentar här. Rätt svar på "hur gör jag det här?" är "gör inte det, det är fel sätt att göra det på."

Om du sätter in värden direkt i frågan så kan hackare hitta ett sätt att placera saker i din fråga som tolkas som SQL-kommandon. Detta är känt som SQL-injektion , och det har varit ansvarigt för skador för miljarder dollar under de senaste decennierna. (Överdriver inte.)

Det rätta sättet att göra det är genom att rengöra din SQL-kod från dina data, genom att använda parametrar, som så:

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

Den exakta syntaxen för hur man ställer in värdet på en parameter kan skilja sig från en datauppsättningstyp till en annan, men det borde ge dig grundidén.



  1. Användaren kan inte utföra valfel 1142

  2. SQL Server Management Studio - Hitta alla icke tomma tabeller

  3. Hur kan jag se hela SQL-jobbhistoriken?

  4. Avbryt en beställning manuellt