Filtro por data (erro:conversion error for string 0)
13/03/2013
0
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.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
Posts
13/03/2013
Felipe Ribeiro
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.
13/03/2013
Evandro Sanz
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.
13/03/2013
Perivaldo Martins
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!
13/03/2013
Evandro Sanz
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!
13/03/2013
Evandro Sanz
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.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.
13/03/2013
Perivaldo Martins
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.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;
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!
13/03/2013
Evandro Sanz
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:
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.
13/03/2013
Evandro Sanz
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------------------------------------------------------------
13/03/2013
Perivaldo Martins
Boa sorte e bons códigos!
02/04/2013
José
Sendo assim, estou marcando este tópico como resolvido.
Clique aqui para fazer login e interagir na Comunidade :)