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

A consulta SQL funciona no Workbench, mas obtém o erro 'Não foi possível converter o tipo de variante' com a mesma consulta exata no Delphi


Concordando com o comentário de SirRufo aqui. A resposta correta para "como faço isso?" é "não faça isso; essa é a maneira errada de fazer isso."

Se você inserir valores diretamente na consulta assim, os hackers podem encontrar uma maneira de colocar coisas em sua consulta que são interpretadas como Comandos SQL. Isso é conhecido como injeção de SQL , e tem sido responsável por bilhões de dólares em danos nas últimas décadas. (Sem exagero.)

A maneira correta de fazer isso é separando claramente o código SQL de seus dados, usando parâmetros, igual a:
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

A sintaxe exata de como definir o valor de um parâmetro pode diferir de um tipo de conjunto de dados para outro, mas isso deve fornecer a ideia básica.