Ir para conteúdo

Arquivado

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

wilsoncrescencio

Consulta em SQL por data

Recommended Posts

Delphi 2006 - ACCESS - ADOConnection

 

Tenho duas tabelas: Aluno e Falta.

As faltas são lançadas pelo operador por data, por exemplo: 17/07/2007 e são gravadas em tabela em um campo date.

 

Eu quero consulatar da seguinte maneira.

Nome dos alunos que faltaram no dia 17/07/2007.

 

Eu tenho usado a seguinte expressão:

 MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.FALTA, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (((CONTROLE.SERIE)="'+crsos.Text+'") AND ((FALTA.FALTA)="'+flta.Text+'"))');  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;  end;

Mas tem apresentado o seguinte erro: "Tipo de dados incompatível na expressão de critério"

Onde estou errando?

Como posso arrumar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aew Morpheu beleza?...

 

Segue um pequeno exemplo de uma aplicação minha com ACCESS e ADO...

QryContatos.Active := False;

QryContatos.SQL.Clear;

QryContatos.SQL.Add('Select * from Contato');

QryContatos.SQL.Add('Where ' + QryCamposContatos.FieldByName('Campo').Value + ' Between '+ QuotedStr(FormatDateTime('mm/dd/yyyy',EdtDaData2.Date))+' AND '+ QuotedStr(FormatDateTime('mm/dd/yyyy',EdtAData2.Date)));

No Access tive que fazer a conversão da Data para o tipo MM/DD/YYYY para rolar a consulta, além de passar como Quoted (ou seja, entre aspas)...

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aew Hugo... show brow?Valeu pela dica... vou fazer a conversão e tentar... qualquer coisa eu posto novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Hugo... aconteceu oseguinte... mudei a expressão para:

procedure TLANCA_FALTAS.Button3Click(Sender: TObject);begin  MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.*, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (CONTROLE.SERIE ="'+crsos.Text+'") AND (FALTA.FALTA = QuotedStr(FormatDateTime("MM-DD-YYYY"("'+Editfalta.Text+'"))');  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;  end;
Retorna o seguinte erro:

"ERRO DE SINTAXE (OPERADOR FALTANDO) NA EXPRESSÃO DE CONSULTA (CONTROLE.SERIE ="'1ª'") AND (FALTA.FALTA = QuotedStr(FormatDateTime("MM-DD-YYYY"("'17/07/2007'"))') ORDER BY ALUNO.ALUNO"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Morpheu....

 

Tente da seguinte forma:

MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.*, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (CONTROLE.SERIE ='+QuotedStr(crsos.Text)+') AND (FALTA.FALTA = ' + QuotedStr(FormatDateTime('MM-DD-YYYY',(Editfalta.Text))));  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;
Note que:

QuotedStr(FormatDateTime('MM-DD-YYYY',(Editfalta.Text)))

 

Não é um comando SQL, e sim do Delphi.. beleza???

 

Abraço! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo... desculpa a ignorância....Mas não está faltando um ' e um + em algum lugar?Porque ainda está dando erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Morpheu, acho que eu havia me esquecido de fechar um parenteses...

 

Tenta agora:

 

MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.*, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (CONTROLE.SERIE = '+QuotedStr(crsos.Text)+') AND (FALTA.FALTA = ' + QuotedStr(FormatDateTime('MM-DD-YYYY',Editfalta.Text)) + ')');  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo com o parentêse fechado ainda esta dando esso erro que não permite compilação:

[Pascal Error] ULANCA_FALTAS.pas(80): E2250 There is no overloaded version of 'FormatDateTime' that can be called with these arguments

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou converter de String pra data...

MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.*, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (CONTROLE.SERIE = '+QuotedStr(crsos.Text)+') AND (FALTA.FALTA = ' + QuotedStr(FormatDateTime('MM-DD-YYYY',StrToDate(Editfalta.Text))) + ')');  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudou o erro... agora o sistema complia. Quando clico no botão da consulta... uma janela de erro aparece com a seguinte mensagem:" Tipo de dados incompatível na expressão de critério"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... tentei umas "cositas"

 

Quando compilo com:

MASTER.SQL.ADD('WHERE (CONTROLE.SERIE = "'+ crsos.Text+'") AND (FALTA.FALTA = ' + QuotedStr(FormatDateTime('MM/DD/YYYY',StrToDate(Editfalta.Text))) + ')');
Ele compila mas da o mesmo erro "Tipo de dados incompatível na expressão de critério"

 

Quando compilo com:

MASTER.SQL.ADD('WHERE (CONTROLE.SERIE = "'+ crsos.Text+'") AND (FALTA.FALTA = ' + FormatDateTime('MM/DD/YYYY',StrToDate(Editfalta.Text))) + '');
Sem o QuotedStr. ele compila não dá erro mas não mostra os dados do aluno que faltou na data do EDitFalta.text

 

Tem alguma idéia do porque?

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a estrutura dos dados???o campo FALTA é de que tipo???o campo SERIE é de que tipo???Tenta tirar ele do Select e tenta rodar sem o campo Falta...

Bom, se você responder as perguntas acima posso começar a pensar sobre...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe.... aí vai:tabela faltaCampo Falta = data/horatabela ControleCampo serie = texto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde fera!!!

experimente fazer assim que é pra fungar kra:

 

MASTER.SQL.ADD('WHERE CONTROLE.SERIE =' + QuotedStr(crsos.Text));  MASTER.SQL.ADD('AND FALTA.FALTA = :pData');  MASTER.Parameters.ParamByName('pData').Value:=  FormatDateTime('dd/mm/yyyy',StrToDate(Editfalta.Text));

ok!! tente aew e nos diga ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpem pelo transtorno e chatiação... tanto o Hugo como o Rodrigo...

 

A minha intenção era mostrar em um DBGrid as faltas de um determinado aluno, em um determinado dia de um determinado ano. Ou todas as faltas de um determinado aluno em um determinado ano.

 

Vocês me ajudaram eu agradeço... mas nenhuma das alternativas culminaram em um resultado.

 

Para dirimir e afastar dúvidas. O erro pode ser meu e estar relacionado com o banco de dados por isso disponibilizo-o em http://www.wilsonfilho.hpg.ig.com.br/docsgae/admesc.rar

 

Muito obrigado pela atenção de ambos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro colega, desculpe pelo inconveniente...

 

Agora segue abaixo o código testado e funcionando perfeitamente como deseja... o meu engano foi pensar que o ACCESS estava aceitando data entre aspas (')...

 

Exemplo:

'07/21/2007'

Mas ele aceita assim:

#07/21/2007#

 

Agora a query corrigida está abaixo...

MASTER.Close;  MASTER.SQL.Clear;  MASTER.SQL.Add('SELECT ALUNO.COD_ALUNO, ALUNO.ALUNO, CONTROLE.SERIE, CONTROLE.ANO, FALTA.*, ALUNO.FoneRespP, ALUNO.RESP, ALUNO.CelRespP, ALUNO.RP,aluno.fone');  MASTER.SQL.ADD('FROM (ALUNO INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO) INNER JOIN FALTA ON ALUNO.COD_ALUNO = FALTA.COD_ALUNO');  MASTER.SQL.ADD('WHERE (CONTROLE.SERIE = '+QuotedStr(crsos.Text)+') AND (FALTA.FALTA = #' + FormatDateTime('MM-DD-YYYY',StrToDate(Editfalta.Text)) + '#)');  MASTER.SQL.ADD('ORDER BY aluno.aluno');  MASTER.Open;

Abraço! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum ...kra me desculpa pela ensistencia, mais sempre q eu uso access + data, sempre faço como t passei no codigo acima e aki sempre funciona perfeitamente!!!mais td bem .... o importante é q foi resolvido!

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.