Fórum Pesquisa por período de Data funcionava e não funciona mais #356400
02/04/2008
0
Detalhando melhor: Trabalho com Delphi7 e InterBase6
Tabela antiga:
PagtoContaPG
Código - Varchar
Data - Varchar
Valor - Varchar
Tipo - Varchar
Nova Tabela:
PagtoContaPG
Código - Integer
Data - Varchar
Valor - Varchar
Tipo - Varchar
Minha pesquisa é feita através de um botão pesquisar em um form q capta os valores através de 2 MaskEdits
o código está assim:
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add(´Select * from PagtoContaPG where Data Between ´´´+MaskEdit1.Text+´´´ and ´´´+MaskEdit2.Text+´´´´);
IBQuery1.Open;
Antes de mudar meu banco ele filtrava certinho tipo se precisasse trazer datas do dia 01/02/08 a 10/02/08 aparecia no relatório o período certo, ordenado por data e tudo!
Agora se fizer a mesma pesquisa, ele me traz todas as datas q iniciam com 01 02 03 04 05 06 07 08 09 e 10, tipo vai traz não só 01/02/08, 02/02/08, 03/02/08... e sim 01/02/08, 01/03/08, 01/05/08 e todos os outros meses q tiver dia 01...
Tentei de tudo e nada funciona, tentei até mesmo declarar a variável no banco como Date, mas mesmo mudando o formato da Data no micro para DD/MM/YY ela salva invertida MM/DD/YY q fica inviável para mim, alguém saberia me ajudar neste caso?
Tatiane
Curtir tópico
+ 0Posts
02/04/2008
Joaoshi
Para as datas passar no formato MM/DD/YYYY, você poderia criar um função que transformasse o conteudo do maskedit no formato da data para o banco de dados.
Um exemplo simples
DataSql := FormatDateTime(´mm/dd/yyyy,StrToDate (MaskEdit1.Text));
Espero ter ajudado.
Gostei + 0
02/04/2008
Tatiane
Sei q a manipulação de data do DateTimePicker é pelo DateTimePicker.Date, mas quando coloco isso no insert o programa não roda e dá erro de incompatibilidade de Date para String, se crio uma variável tipo string e coloco o valor transformado, o programa roda, mas na hora de salvar dá erro de incompatibilidade de String para Date.
Alguém teria algum exemplo de insert q use o DateTimePicker para me passar para q possa ver no q estou pecando?
Gostei + 0
02/04/2008
Joaoshi
´SET SEUCAMPODATA = ´ + QuotedStr(FormatDateTime(´mm/dd/yyyy´,DateTimePicker1.Date))
Espero ter ajudado.
Gostei + 0
02/04/2008
Tatiane
Gostei + 0
03/04/2008
Tatiane
PagtoConta
Codigo - Integer
CodContaPG - Integer
NumParc - Integer
Data - TimesTamp
Tipo - Varchar
pois bem montei a tela de pesquisa com dois DateTimePicker, mudei o format deles para dd/MM/yyyy apenas pra ficar mais bonitinho de se ver, e montei meu botão pesquisar usando parâmetros pras datas como já haviam me dado a dica antes então ficou assim:
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add(´select * from PagtoConta where Data Between :inicio and :fim´);
IBQuery1.Parambyname(´inicio´).AsDateTime:=DateTimePicker1.Date;
IBQuery1.Parambyname(´fim´).AsDateTime:=DateTimePicker2.Date;
IBQuery1.Open;
Agora vem o pequeno problema, no banco de dados a data acaba ficando no formato M/D/YYYY mesmo usando o DateTimePicker na tela de inclusão, quando salvo na tabela automaticamente acontece isso, então aí está o problema, quando faço a pesquisa ele interpreta a data como sendo DD/MM/YY no visual, no valor do DateTimePicker como D/M/YYYY e no banco M/D/YYYY, imaginem o q acontece quando realizo a pesquisa... logicamente pensando acontece assim:
Datas do Banco
4/1/2008 q seria dia 1 mês 4 ano 2008 e assim por diante
4/2/2008
4/4/2008
4/5/2008
5/1/2008
6/1/2008
7/1/2008
as datas informadas à pesquisa:
:Inicio 01/04/08 visualmente e no valor do DateTimePicker 1/4/2008
:Fim 10/04/08 visualmente e no valor do DateTimePicker 10/4/2008
o q ele traz na minha pesquisa? - somente o 4/4/2008 do banco
se inverto o formatdateTime para M/D/YYYY
acontece assim:
:Inicio 01/04/08 invertido mês 1 dia 4 ano 2008
:Fim 10/04/08 invertido mês 10 dia 4 ano 2008
o que ele traz pra minha pesquisa? Tudo
se crio variáveis para separar dia mes ano e remontar a data no formato
ele não filtra absolutamente nada!
então o q me dizem?
Gostei + 0
03/04/2008
Joaoshi
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add(´select * from PagtoConta where [b:79b33ead9a]CAST(Data AS DATE)[/b:79b33ead9a] Between :inicio and :fim´);
IBQuery1.Parambyname(´inicio´).AsDateTime:=DateTimePicker1.Date;
IBQuery1.Parambyname(´fim´).AsDateTime:=DateTimePicker2.Date;
IBQuery1.Open;
Espero ter ajudado.
Gostei + 0
03/04/2008
Tatiane
as datas informadas à pesquisa:
:Inicio 01/04/08 visualmente e no valor do DateTimePicker 1/4/2008
:Fim 10/04/08 visualmente e no valor do DateTimePicker 10/4/2008
ele pensa:
D/M/YYYY
mas na realidade é:
M/D/YYYY
4/4/2008 - como se tivesse me referindo a ela ao contrário entende?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)