GARANTIR DESCONTO

Fórum Pesquisa por período de Data funcionava e não funciona mais #356400

02/04/2008

0

Tinha uma pesquisa por período de data, onde minha data é String q funcionava certinho e agora está furada! alguém saberia me dizer o q pode ter acontecido? Tudo o q fiz foi mudar um campo da tabela de String para Inteiro, refiz toda a programação e realmente não está funcionando:
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

Tatiane

Responder

Posts

02/04/2008

Joaoshi

Colega, acho que o correto seria ter o campo definido como [b:f3d3928e2b]DATE[/b:f3d3928e2b] para evitar problemas futuros.

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.


Responder

Gostei + 0

02/04/2008

Tatiane

Certo, fiz isso e resolvi usar o DateTimePicker q migra o formato de data do Computador, mas como nunca usei o DateTimePicker, no meu insert não tenho a menor idéia de como passar a data dele para o Banco.
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?


Responder

Gostei + 0

02/04/2008

Joaoshi

Colega, para fazer o insert:

´SET SEUCAMPODATA = ´ + QuotedStr(FormatDateTime(´mm/dd/yyyy´,DateTimePicker1.Date))

Espero ter ajudado.


Responder

Gostei + 0

02/04/2008

Tatiane

Valeu mesmo a dica! funcionou


Responder

Gostei + 0

03/04/2008

Tatiane

Retornando a questão da pesquisa, agora já com uma definição melhor, acabei declarando a variável Data como TimesTamp já q uso dialect 3, portanto minha tabela ficou assim:

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?


Responder

Gostei + 0

03/04/2008

Joaoshi

IBQuery1.Close;
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.


Responder

Gostei + 0

03/04/2008

Tatiane

Mesmo usando o Cast(Data as Date) ele só traz a data referente
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?


Responder

Gostei + 0

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

Aceitar