Erro parâmetros AdoQuery

22/03/2022

0

Pessoal, Boa Noite.

Sou totalmente novo no Delphi. Venho da WEB e preciso fazer projetinho no Delphi (XE8).
Basicamente, a rotina é:
Estou fazendo um SELECT em um banco de dados MySql e vejo qual o ID do último registro inserido. Pego o resultado dessa consulta e guardo em uma variável chamada id.

Uso o ADOQuery e faço um SELECT em um banco de dados access, passando como parâmetro no WHERE o id recebido anteriormente.
Quando rodo a consulta, me retorna: ADOQuery1: Parameter ''id_param'' not found.

Abaixo, meu código para análise. Não crio nada via design, tudo via código.

SQL.Clear;
ShowMessage(id); //retorna o id recebido na consulta ao Mysql
SQL.Add(''SELECT * FROM TABELA'');
SQL.Add(''WHERE "Código" >: id_param'');
SQL.Add(''ORDER BY "Código" DESC'');
SQL.Add(''LIMIT 100'');
ADOQuery1.Parameters.ParamByName(''id_param'').Value := StrtoInt(id);
Open;
Showmessage(''Passou na função tudo belezinha. A Campo na tabela Access é  '' + FieldByName(''campo'').AsString); //Não chega aqui.. dá o erro do Parâmetro antes.


Alguém consegue me passar uma luz e me mostrar onde esta o erro?

PS: O Nome da tabela no Access realmente é Código, com Upper, Lower Case e acentuação.
Oswaldo

Oswaldo

Responder

Posts

23/03/2022

Emerson Nascimento

o sinal dois pontos (:) precisa ficar "colado" no nome do parâmetro.
SQL.Add('WHERE "Código" > :id_param');
a comparação é "maior" mesmo?

Responder

23/03/2022

Oswaldo

o sinal dois pontos (:) precisa ficar "colado" no nome do parâmetro.
SQL.Add('WHERE "Código" > :id_param');
a comparação é "maior" mesmo?



Olá, obrigado por ajudar.
sim, a comparação é "maior" realmente. A sua dica funcionou, dicar o : colado ao nome do parâmetro resolveu o erro. Agora, esta dando erro de sintaxe na cláusula ORDER BY.
Consegue ver algum erro nela?
SQL.Add('ORDER BY "Código" DESC');
Responder

23/03/2022

Gxf

SQL.Clear;
ShowMessage(id); //retorna o id recebido na consulta ao Mysql
SQL.Add('SELECT * FROM TABELA ');
SQL.Add('WHERE 'Código' > :id_param ');
SQL.Add('ORDER BY 'Código' DESC ');
SQL.Add('LIMIT 100');
ADOQuery1.Parameters.ParamByName('id_param').Value := StrtoInt(id);
Open;
Showmessage(''Passou na função tudo belezinha. A Campo na tabela Access é '' + FieldByName(''campo'').AsString); //Não chega aqui.. dá o erro do Parâmetro antes.
Responder

23/03/2022

Oswaldo

RESOLVIDO

O problema estava no LIMIT 100.

SQL.Clear;
//ShowMessage(id); //retorna o id recebido na consulta ao Mysql
SQL.Add('SELECT TOP 100 * FROM TABELA');
SQL.Add('WHERE 'Código' > :id_param ');
SQL.Add('ORDER BY 'Código' DESC ');
ADOQuery1.Parameters.ParamByName('id_param').Value := StrtoInt(id);
Open;
Showmessage(''Passou na função tudo belezinha. A Campo na tabela Access é '' + FieldByName(''campo'').AsString); 


Esse código funcionou 100%. Agradeço a todos pela ajuda e esclarecimentos.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar