sql >> Base de Datos >  >> Database Tools >> MySQL Workbench

SQL Query funciona en Workbench pero obtiene el error "No se pudo convertir el tipo de variante" con exactamente la misma consulta en Delphi

De acuerdo con el comentario de SirRufo aquí. La respuesta correcta a "¿cómo hago esto?" es "no hagas eso; esa es la forma incorrecta de hacerlo".

Si agrega valores directamente a la consulta de esa manera, los piratas informáticos pueden encontrar una manera de colocar cosas en su consulta que se interpreten como Comandos SQL. Esto se conoce como inyección SQL. , y ha sido responsable de miles de millones de dólares en daños en las últimas décadas. (Sin exagerar.)

La forma correcta de hacerlo es separando limpiamente su código SQL de sus datos, usando parámetros, así:

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 sintaxis exacta sobre cómo establecer el valor de un parámetro puede diferir de un tipo de conjunto de datos a otro, pero eso debería darle una idea básica.