SQL Duvida em pesquisa

Delphi

16/08/2012

estou tentando fazer uma fitlragem com 3 dados, Nome, data inicial e data final, estou começando agora a programar.meu código ficou assim:

dmdados2.ADOQuerygravacao2.Close;
dmdados2.ADOQuerygravacao2.sql.clear;
dmdados2.ADOQuerygravacao2.SQL.Add(select * from gravacao );
dmdados2.ADOQuerygravacao2.SQL.Add ( where nome=:nome and data>=:data1 and data<=:data2);
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(nome).Value:=edit5.Text;
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data1).Value:=strTodate(Edit3.Text);
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data2).Value:=strTodate(Edit4.Text);
dmdados2.ADOQuerygravacao2.open;

Gabriel Soares

Gabriel Soares

Curtidas 0

Respostas

Bruno Leandro

Bruno Leandro

16/08/2012

Sim gabriel, e qual seria a seu duvida
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

o Código não funciona!!!!
Ele filtra o Nome, e data não:

Nome> Fulano > Data inicial 12/02/2012 > Data Final 16/02/2012
estou querendo filtrar todos dados com o fulano nesse intervalo de data
mas meu código está pegando o nome > Fulano e só o dia 12 e o dia 16, não está pegando o mes nem o ano

fica assim

nome | data ini | data fin |

fulano | 12/01/2009 | 16/02/2012....

e assim por diante.
GOSTEI 0
Douglas Michelino

Douglas Michelino

16/08/2012

Isso deve resolver.


var
wdata_inicio,wdata_fim:string;
begin

dmdados2.ADOQuerygravacao2.Close;
dmdados2.ADOQuerygravacao2.sql.clear;
dmdados2.ADOQuerygravacao2.SQL.Add(select * from gravacao );


dmdados2.ADOQuerygravacao2.SQL.Add ( where data between :data1 and :data2 );
dmdados2.ADOQuerygravacao2.SQL.Add ( and nome = :nome );

wdata_inicio:=copy(edit3.text,4,2)+'/'+copy(edit3.text,1,2)+'/'+copy(edit3.text,7,4);
wdata_fim:=copy(edit4.text,4,2)+'/'+copy(edit4.text,1,2)+'/'+copy(edit4.text,7,4);

dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data1).Value:=wdata_inicio;
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data2).Value:=wdata_fim;
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(nome).Value:=edit5.Text;

dmdados2.ADOQuerygravacao2.open;
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

Obrigado pela atenção, mas não resolveu... =/
Vou tentar outro jeito...

está dando a mesma coisa...
não está filtrando a data...
só filtra o nome, a data continua sem filtrar..

vlw galera
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

Obrigado pela atenção, mas não resolveu... =/
Vou tentar outro jeito...

está dando a mesma coisa...
não está filtrando a data...
só filtra o nome, a data continua sem filtrar..

vlw galera
GOSTEI 0
William

William

16/08/2012

Colega, qual SGBD vc está usando?

Qual o tipo desse campo no banco de dados(date, datetime, varchar)?
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

Bando de dados access
o campo o do tipo : date
GOSTEI 0
Romulo Contro

Romulo Contro

16/08/2012

tem que ver o formato da data que salva no banco...

passei por isso em sql server, e fiz uma gambiarra mais ou menos assim:
print - http://puu.sh/WdI5

a explicação disso aí é a seguinte... to pegando o texto do meu Edit, convertendo pra datetime, e depois dando um format passando pra string de novo no formato que eu quero... e o QuotedStr coloca a data entre aspas pra mandar o comando pro banco...

tenta fazer algo semelhante pra ver se não da certo!

abraço!
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

o Código q eu citei no inicio do Post funciona corretamente pesquisando dia contendo apenas 1 digito
2/2/2012 À 2/8/2012

agora se eu colocar
20/2/2012 à 20/8/2012

ele puxa todos os dados com o nome filtrado, mas com todas as datas
será que é um problema de conversão de string para date no edit
coloquei 2 DateTimerPicker na data inicial e data final, passando o valor para um edit

Edit3.Text := DateToStr(DateTimePicker2.Date);

Estou proximo de encontrar o erro

vlw mais uma vez pela atenção de todos
GOSTEI 0
William

William

16/08/2012

Colega trabalhar com datas no Access é sempre uma tortura mesmo, tenta usar esse código no filtro:


//Ajusta o formato das datas
dt1 := formatdatetime('mm/dd/yyyy', DateTimePicker1.Date);
dt2 := formatdatetime('mm/dd/yyyy', DateTimePicker2.Date);

dmdados2.ADOQuerygravacao2.Close;
dmdados2.ADOQuerygravacao2.sql.clear;
dmdados2.ADOQuerygravacao2.SQL.Add(select * from gravacao );
dmdados2.ADOQuerygravacao2.SQL.Add ( where nome=:nome and data>=:data1 and data<=:data2);
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(nome).Value:=edit5.Text;
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data1).Value:= '#' + dt1 + '#'; //O Access tem essas frescuras de usar #
dmdados2.ADOQuerygravacao2.Parameters.ParamByName(data2).Value:= '#' + dt2 + '#'; O Access tem essas frescuras de usar #
dmdados2.ADOQuerygravacao2.open;


Testa se não der certo avisa que vamos encontrar a solução.
GOSTEI 0
Bruno Leandro

Bruno Leandro

16/08/2012

Ola grabriel ao iniciar voce pode verificar se a configuração do windows esta dd/mm/yyyy caso nao esteja voce pode finalizar o programa e pedir que seja configurado corretamente

ShortDateFormat <> 'dd/MM/yyyy'

para configurar eh no painel de controle / regiao e idioma / formatos de datas abreviadas / e configurar para dd/MM/aaaa
GOSTEI 0
Romulo Contro

Romulo Contro

16/08/2012

Olá Gabriel...

eu sugeri vc formatar a data daquele jeito lá pq pode ser que tá filtrando o mês ao invés do dia... faz o teste de filtrar um dia 12 e um dia 13 pra ver... se no 12 der certo e no 13 não, creio que é o formato da data mesmo... se não, aí nao sei.
GOSTEI 0
Gabriel Soares

Gabriel Soares

16/08/2012

Pessoal consegui resolver com ajuda de vcs...
caiu minha ficha que no PC que estava funcionando o programa, estava cadastrando com o formato da data diferente daquele que meu PC estava...
O programa já funciona faz 2 anos, mas o cliente solicitou uma atualização, que o formato de data do meu O.S difere da data do Sistema dele, tudo resolvido graças o despertar de vcs, esqueci de pensar na lógica, agradeço a todos pela paciência de responder

begin
if combobox2.text='Nome' then
begin

dmdados2.ADOQuerygravacao2.Close;
dmdados2.ADOQuerygravacao2.sql.clear;
dmdados2.ADOQuerygravacao2.SQL.Add('select * from tabela' );
dmdados2.ADOQuerygravacao2.SQL.Add ( 'where fulano=:fulano and data>=:data1 and data<=:data2');
dmdados2.ADOQuerygravacao2.Parameters.ParamByName('fulano').Value:= edit5.Text;
dmdados2.ADOQuerygravacao2.Parameters.ParamByName('data1').Value:=strtodate (Edit3.Text);
dmdados2.ADOQuerygravacao2.Parameters.ParamByName('data2').Value:=strtodate (edit5.Text);
dmdados2.ADOQuerygravacao2.sql.Add('order by data');
dmdados2.ADOQuerygravacao2.open;
GOSTEI 0
POSTAR