sql >> Databáze >  >> Database Tools >> MySQL Workbench

SQL Query funguje ve Workbench, ale se stejným dotazem v Delphi se zobrazí chyba „Nelze převést typ varianty“

Souhlasím s komentářem SirRufo zde. Správná odpověď na otázku "Jak to mám udělat?" je "nedělej to, to je špatný způsob, jak to udělat."

Pokud takto vložíte hodnoty přímo do dotazu, hackeři mohou najít způsob, jak do dotazu umístit věci, které budou interpretovány jako SQL příkazy. Toto je známé jako vložení SQL a v posledních několika desetiletích způsobila škody v hodnotě miliard dolarů. (Nepřeháním.)

Správný způsob, jak to udělat, je čisté oddělení kódu SQL od dat pomocí parametrů takhle:

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

Přesná syntaxe toho, jak nastavit hodnotu parametru, se může u různých typů datových sad lišit, ale to by vám mělo poskytnout základní představu.



  1. Sql Server Management Studio se zavře ihned po spuštění

  2. Jak spustit soubory .sql k vytvoření nových tabulek

  3. Vyhledejte a poté odstraňte ze dvou tabulek

  4. Jak odstranit jedinečný klíč v konkrétním poli tabulky mysql