Problema executando SQL com ADOQuery
Olá Amigos
Mais uma vez peço a ajuda de vocês. Tenho um ADOQuery que utilizo para excutar a limpeza de diversos arquivos utilizando o comando SQL que está abaixo. Porém, em todas as tabelas que desejo limpar e que o campo data está formatado como data não tenho problemas, executad perfeitamente, mas uma das tabelas está com um campo onde é armazenada a data formatado como texto e quando tento executar o comando abaixo dá uma mensagem de erro indicando que o parâmetro ´varData´ não foi encontrado. Onde é que estou errando?
ADOQuery1.Close;
ADOQuery1.SQL.Text := ´delete from Notas where data = :varData and Cliente is null´;
ADOQuery1.Parameters.ParamByName(´varData´).Value := DateToStr(dData);
ADOQuery1.ExecSQL;
Obrigado amigos.
Mais uma vez peço a ajuda de vocês. Tenho um ADOQuery que utilizo para excutar a limpeza de diversos arquivos utilizando o comando SQL que está abaixo. Porém, em todas as tabelas que desejo limpar e que o campo data está formatado como data não tenho problemas, executad perfeitamente, mas uma das tabelas está com um campo onde é armazenada a data formatado como texto e quando tento executar o comando abaixo dá uma mensagem de erro indicando que o parâmetro ´varData´ não foi encontrado. Onde é que estou errando?
ADOQuery1.Close;
ADOQuery1.SQL.Text := ´delete from Notas where data = :varData and Cliente is null´;
ADOQuery1.Parameters.ParamByName(´varData´).Value := DateToStr(dData);
ADOQuery1.ExecSQL;
Obrigado amigos.
Carlos Alberto
Curtidas 0
Respostas
Tnaires
02/06/2004
Tente passar o valor do parâmetro sem convertê-lo para string.
GOSTEI 0
Bon Jovi
02/06/2004
TParameters é muito chato... No seu caso tem como fugir disso. Se no banco ´varData´ não é Date/Time e sim texto, então concatene direto no SQL.
const
SEU_FORMATO_TEXTO_DATA = ´dd/mm/yyyy´;
var
StrData: string;
begin
StrData := FormatDateTime(SEU_FORMATO_TEXTO_DATA, dData);
ADOQuery1.Close;
ADOQuery1.Parameters.Clear;
ADOQuery1.ParamCheck := False;
ADOQuery1.SQL.Text := ´delete from Notas where data = ´ + QuotedStr(StrData) + ´ and Cliente is null´;
ADOQuery1.ExecSQL;
Mesmo sendo tipo datetime no banco, dependendo do banco tb tem como fugir do TParameters, mas terá q usar função do banco pra conversão de string pra datetime.
const
SEU_FORMATO_TEXTO_DATA = ´dd/mm/yyyy´;
var
StrData: string;
begin
StrData := FormatDateTime(SEU_FORMATO_TEXTO_DATA, dData);
ADOQuery1.Close;
ADOQuery1.Parameters.Clear;
ADOQuery1.ParamCheck := False;
ADOQuery1.SQL.Text := ´delete from Notas where data = ´ + QuotedStr(StrData) + ´ and Cliente is null´;
ADOQuery1.ExecSQL;
Mesmo sendo tipo datetime no banco, dependendo do banco tb tem como fugir do TParameters, mas terá q usar função do banco pra conversão de string pra datetime.
GOSTEI 0
Carlos Alberto
02/06/2004
Obrigado Amigos,
Funcionou perfeitamente.
Abraço
Funcionou perfeitamente.
Abraço
GOSTEI 0