Filtro por data (erro:conversion error for string 0)

13/03/2013

0

Bom dia,

Estou precisando de uma força se alguem tiver conhecimento, utilizo ibtable e ibquerye o banco de dados firebird 2.5
Estou tentando fazer um filtro por um de terminado período de data selecionado pelo usuário atraves de 2 TSDATEEDIT, porém esstá dando o seguinte ERRO: conversion error for string 0)
Vou postar os códigos abaixo:

DM.ibtblEntPai.Filtered:= False;
DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA,CO.NOME_FORN,CA.entpai_vencimento');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsString:=Formatdatetime('dd/mm/yyyy',sDateinicial.date);
DM.QrySQL.ParamByName('ATE').AsString:= Formatdatetime('dd/mm/yyyy',sDateFinal.Date);
dataini:= DM.QrySQL.ParamByName('DE').AsString;
datafim := DM.QrySQL.ParamByName('ATE').AsString;
DM.QrySQL.Open;
if not DM.QrySQL.IsEmpty then
begin
DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + dataini + ' AND ' + datafim);
DM.ibtblEntPai.Filtered:= True;
end;
else
begin
Application.MessageBox('Não foi encontrado nenhuma nota fiscal para esse Período!','Mensagem do Sistema',MB_ICONINFORMATION + MB_OK);
DM.ibtblEntPai.Filtered:= False;
end;

O campo data ENTPAI_DATA_ENTRADA está com formato DATE no banco.

Obrigado.

Evandro Sanz

Evandro Sanz

Responder

Posts

13/03/2013

Felipe Ribeiro

Boa tarde.
Não estou acostumado a usar o Filter.

Mas eu tentaria alterar isso:


DM.ibtblEntPai.Filter := ('ENTPAI_DATA_ENTRADA BETWEEN ' + dataini + ' AND ' + datafim);


Por isso:


DM.ibtblEntPai.Filter := ('ENTPAI_DATA_ENTRADA BETWEEN ' + QuotedStr(dataini) + ' AND ' + QuotedStr(datafim));



Espero que te ajude.
Responder

13/03/2013

Evandro Sanz

Espero que te ajude.

Boa tarde Felipe,

Executei a sua sugestão porém deu outro Erro: conversion erro for String "13/03/2013"

Alguma sugestão para o tratamento do mesmo?

Obrigado.
Responder

13/03/2013

Perivaldo Martins

Teste como desse jeito.
var
DataIni, DataFim: TDate;
...

DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA,CO.NOME_FORN,CA.entpai_vencimento');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
dataini:= DM.QrySQL.ParamByName('DE').AsDate;
datafim := DM.QrySQL.ParamByName('ATE').AsDate;
DM.QrySQL.Open;


Após os teste retorne ao fórum para informar se funcionou ou se ainda precisa de algum auxilio.

Boa sorte e bons códigos!
Responder

13/03/2013

Evandro Sanz

Boa tarde Martins

Executei a sua sugestão porém deu o seguinte Erro: conversion error for String "13/03/2013"

Eu utilizo o firebird 2.5 com o ibexpert

O SQL De busca por data ficou assim





select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA, CO.NOME_FORN,CA.entpai_vencimento
FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)
WHERE CA.ENTPAI_DATA_ENTRADA = '2013.03.14'




a data do firebird tem que ser yyyy.mm.dd se não me engano o problema está no filtro ou nessa conversão!


segue código que utilizei abaixo:

DM.ibtblEntPai.Filtered:= False;
DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA, CO.NOME_FORN,CA.entpai_vencimento');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
dataini:= DM.QrySQL.ParamByName('DE').AsDate;
datafim := DM.QrySQL.ParamByName('ATE').AsDate;
DM.QrySQL.Open;

if not DM.QrySQL.IsEmpty then
begin
DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + QuotedStr(DateToStr(dataini)) + ' AND ' + QuotedStr(DateToStr(datafim)));
DM.ibtblEntPai.Filtered:= True;
end
else
begin
Application.MessageBox('Não foi encontrado nenhuma nota fiscal para esse Período!','Mensagem do Sistema',MB_ICONINFORMATION + MB_OK);
DM.ibtblEntPai.Filtered:= False;
end;
end;



Obrigado se tiver alguma idéia!
Responder

13/03/2013

Evandro Sanz

Pessoal,

Fiz algumas modificações no código e agora o eero parece ser de sql, porém não consigo enchergar o mesmo.
Mensagem do erro

DYNAMIC SQL ERROR
SQL ERRORCODE = -104 TOKEN UNKNOWN -LINE 2, COLUMN32 2

O Código com as sugestões dos amigos axima ficou da seguinte forma:

DM.ibtblEntPai.Filtered:= False;
DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA, CO.NOME_FORN,CA.entpai_vencimento');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
dataini:= DM.QrySQL.ParamByName('DE').AsDate;
datafim := DM.QrySQL.ParamByName('ATE').AsDate;
DM.QrySQL.Open;
if not DM.QrySQL.IsEmpty then
begin
DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + Formatdatetime('yyyy.mm.dd',dataini) + ' AND ' + Formatdatetime('yyyy.mm.dd',datafim));
DM.ibtblEntPai.Filtered:= True;
end
else
begin
Application.MessageBox('Não foi encontrado nenhuma nota fiscal para esse Período!','Mensagem do Sistema',MB_ICONINFORMATION + MB_OK);
DM.ibtblEntPai.Filtered:= False;
end;
end;

Acho que falta pouco pra resolver alguma sugestão????

Obrigado.
Responder

13/03/2013

Perivaldo Martins

Pessoal,

Fiz algumas modificações no código e agora o eero parece ser de sql, porém não consigo enchergar o mesmo.
Mensagem do erro

DYNAMIC SQL ERROR
SQL ERRORCODE = -104 TOKEN UNKNOWN -LINE 2, COLUMN32 2

O Código com as sugestões dos amigos axima ficou da seguinte forma:

DM.ibtblEntPai.Filtered:= False;
DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA, CO.NOME_FORN,CA.entpai_vencimento ');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
dataini:= DM.QrySQL.ParamByName('DE').AsDate;
datafim := DM.QrySQL.ParamByName('ATE').AsDate;
DM.QrySQL.Open;
if not DM.QrySQL.IsEmpty then
begin
DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + Formatdatetime('yyyy.mm.dd',dataini) + ' AND ' + Formatdatetime('yyyy.mm.dd',datafim));
DM.ibtblEntPai.Filtered:= True;
end
else
begin
Application.MessageBox('Não foi encontrado nenhuma nota fiscal para esse Período!','Mensagem do Sistema',MB_ICONINFORMATION + MB_OK);
DM.ibtblEntPai.Filtered:= False;
end;
end;

Acho que falta pouco pra resolver alguma sugestão????

Obrigado.



DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
sDateinicial é um DateTimePicker?

Execute só o Script SQL no IBExpert e veja se está filtrando certo.


DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + Formatdatetime('yyyy.mm.dd',dataini) + ' AND ' + Formatdatetime('yyyy.mm.dd',datafim));


Mude para:
 DM.ibtblEntPai.Filter:= 'ENTPAI_DATA_ENTRADA >=' + QuotedStr(DateToStr(dataini)) + ' AND ENTPAI_DATA_ENTRADA <=' + QuotedStr(DateToStr(datafim));


Estou as cegas aqui, sem ter como testar o código.

Boa sorte e bons códigos!
Responder

13/03/2013

Evandro Sanz

Martins,

Então meu amigo, o Script SQL no Ibexpert está rodando certinho mas tem que ser no formato de data yyyy.mm.dd




DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;

O componetnte que uso é do alphacontrols da aba AlphaAdditional e chama sDateEdit : TsDateEdit
fiz o teste com o Tdatetimepiker para ver se rodava mas deu o mesmo problema que dá com o TsDateEdit

Quando filtro com:
DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + Formatdatetime('yyyy.mm.dd',dataini) + ' AND ' + Formatdatetime('yyyy.mm.dd',datafim));

O erro é: DYNAMIC SQL ERROR
SQL ERRORCODE = -104 TOKEN UNKNOWN -LINE 2, COLUMN32 2

Quando filtro com:
DM.ibtblEntPai.Filter:= 'ENTPAI_DATA_ENTRADA >=' + QuotedStr(DateToStr(dataini)) + ' AND ENTPAI_DATA_ENTRADA <=' + QuotedStr(DateToStr(datafim));

O Erro é: conversion error for String "13/03/2013"

Obrigado.
Responder

13/03/2013

Evandro Sanz

Resolvido o problema meu brother!

DM.ibtblEntPai.Filtered:= False;
DM.QrySQL.Close;
DM.QrySQL.SQL.Clear;
DM.QrySQL.SQL.Add('select CA.ENTPAI_NOTA, CA.ENTPAI_ID_FORNECEDOR, CA.ENTPAI_DATA_ENTRADA, CO.NOME_FORN,CA.entpai_vencimento');
DM.QrySQL.SQL.Add('FROM ent_pai CA LEFT JOIN FORNECEDOR CO ON (CA.ENTPAI_ID_FORNECEDOR = CO.ID_FORN)');
DM.QrySQL.SQL.Add('WHERE CA.ENTPAI_DATA_ENTRADA BETWEEN :DE and :ATE' );
DM.QrySQL.ParamByName('DE').AsDate := sDateinicial.Date;
DM.QrySQL.ParamByName('ATE').AsDate := sDateFinal.Date;
dataini:= DM.QrySQL.ParamByName('DE').AsDate;
datafim := DM.QrySQL.ParamByName('ATE').AsDate;
DM.QrySQL.Open;
if not DM.QrySQL.IsEmpty then
begin

DM.ibtblEntPai.Filter:= ('ENTPAI_DATA_ENTRADA BETWEEN ' + QuotedStr(Formatdatetime('yyyy.mm.dd',dataini)) + ' AND ' + QuotedStr(Formatdatetime('yyyy.mm.dd',datafim)));
DM.ibtblEntPai.Filtered:= True;
end
else
begin
Application.MessageBox('Não foi encontrado nenhuma nota fiscal para esse Período!','Mensagem do Sistema',MB_ICONINFORMATION + MB_OK);
DM.ibtblEntPai.Filtered:= False;
end;
end;


Obrigado pela força Martins.

-------------------------------------------------Resolvido------------------------------------------------------------
Responder

13/03/2013

Perivaldo Martins

Tranquilo, o importante é que foi resolvido.

Boa sorte e bons códigos!
Responder

02/04/2013

José

obrigado pelo retorno.
Sendo assim, estou marcando este tópico como resolvido.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar