Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tatiane.InterArt

Pesquisa por período de Data funcionava e não funciona mais

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tatiane como você ta usando no MaskEdit o formado dd/mm/yyyy quando você passa isso pro banco com as "/" ele converte pra string e compara string com string, realmente nao da erro e retorna os resultados errados.

antes de enviar para o banco você deve trocar as "/" por ".", ou subistituir a mascara para "dd.mm.yyyy"

isso já resolve seu problema

 

porem eu faria isso aih um pouco diferente:

 

note que sua sql não muda, o que muda são apenas os parametros então tente usar assim

 

na sua SQLQuery1 defina a propridade SQL com:

Select * from PagtoContaPG where Data Between :data1 and :data2

 

assim você estara criando dois parametros data1 e data2 certo?

 

agora na SQLQuery1 vá em Params clique nos "..." vai abrir uma tela "Edit SQLQuery1->Params"

adicione 2 parametros o nome deles não precisam ser identicos aos que você criou na sql...

mas se desejar coloque igual data1 e data2, selecione os dois e coloque no DataType como ftDate

verifique se o paramtype está como ptInput, se não tiver mude para ptInput

pronto

 

agora você vai fazer assim

troque os maskedits por dois TDateTimePicker vamos supor que seus nomes são respectivamente datepicker1 e datepicker2

 

agora no click do seu botao de pesquisa coloque o seguinte:

 

SQLQuery1.Close;

SQLQuery1.Params[0].asDate := datepicker1.date;

SQLQuery1.Params[1].asDate := datepicker2.date;

SQLQuery1.Open;

 

note que chamamos os parametros pelo índice... por isso deve criar o numero exato de parametros, a vantagem também é que você pode tipar os parametros,

como você os definiu fomo ftDate você pode passar o datepicker1.date independende da mascara q esta usando no datepicker

 

espero que tenha ajudado

 

abraço

 

ps: qquer duvida me chame no msn

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajudou e muito, porém me causou outro probleminha, neste caso acabei recriando meu banco com a Data tipo Date, então na tela onde crio esta tabela usava também um maskedit e precisaria usar um DateTimePicker também para ficar mais prático, mas, no Insert se passo o valor do DateTimePicker o software não roda e dá erro de incompatibilidade de String para Date, se jogo o valor do DateTimePicker em uma String o software roda mas no momento de salvar dá erro de incompatibilidade de Date para String...

 

Vai entender, tem algum exemplo de insert com DateTimePicker sendo a data tipo Date no banco para me mandar assim posso ver no que estou errando!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajudou e muito, porém me causou outro probleminha, neste caso acabei recriando meu banco com a Data tipo Date, então na tela onde crio esta tabela usava também um maskedit e precisaria usar um DateTimePicker também para ficar mais prático, mas, no Insert se passo o valor do DateTimePicker o software não roda e dá erro de incompatibilidade de String para Date, se jogo o valor do DateTimePicker em uma String o software roda mas no momento de salvar dá erro de incompatibilidade de Date para String...

 

Vai entender, tem algum exemplo de insert com DateTimePicker sendo a data tipo Date no banco para me mandar assim posso ver no que estou errando!

Entendi Tatiane, vais ter problema sim...

eu uso um componente que é free chama VCL Components desenvolvido pela Project Jedi, ele é free, a vantagem é que ele tem um DBDatePicker

ou seja, você pode ligar diretamente ao seu campo do banco de dados... funciona perfeitamente...

dei a ideia com o Tdatetimepicker pq eh a solucao padrao do delphi, baixe o VCL e comece usando esse componente, mas tem muito mais coisas boas nele, você pode baixa-lo em http://homepages.codegear.com/jedi/jvcl/

baixa esse aqui ó "JVCL 3 JVCL 3.33 September 19, 2007", a instalção dele é super simples, tipo avançar, avançar rs

depois de instalado abra seu delphi e teste o componente TjvDBDatePickerEdit... nele você jah consegue ligar ao seu banco diretamente...

 

abraço

 

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO!

Lucas adorei a dica, funciona perfeitamente, fiz o teste, e enquanto fazia o teste descobri uma coisa, descobri que o erro q estava aparecendo não era por acaso não, justamente havia esquecido de mudar o nome da tabela no meu teste, imaginem só, criei uma tabela com nome parecido apenas para teste e para não ficar mto difícil a alteração e acabei me esquecendo de fazer essa alteração no insert... coisas da vida...

 

Valeu a ajuda de todos pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO!

Lucas adorei a dica, funciona perfeitamente, fiz o teste, e enquanto fazia o teste descobri uma coisa, descobri que o erro q estava aparecendo não era por acaso não, justamente havia esquecido de mudar o nome da tabela no meu teste, imaginem só, criei uma tabela com nome parecido apenas para teste e para não ficar mto difícil a alteração e acabei me esquecendo de fazer essa alteração no insert... coisas da vida...

 

Valeu a ajuda de todos pessoal!

 

que bom Tatiane, essas coisas acontecem,

não esquece de editar o nome do topico para [RESOLVIDO]

 

abraço

 

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.