Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Select com data Delphi + Access


João Paulo Taraciuk

Pergunta

Olá pessoal, estou encontrando dificuldades para realizar um select levando data como parametro, assim, eu estou jogando os dados numa função que retorna string, para realizar o filtro com várias opções de consulta, a função está assim:

Function CamposFiltro(): String;

function Tfrm_cadastro.CamposFiltro: String;
begin
if(Trim(Edtnome.Text)<>'')then
Result:=Result + 'and(a.nome=' + QuotedStr(EdtNome.Text)+')';
if(MaskNasc.Text<>'  /  /    ')and(MaskFinal.Text<>'  /  /    ')then
Result:=Result +'and(a.data_nascimento between ('+ QuotedStr(MaskNasc.Text)+') and('+QuotedStr(MaskFinal.Text)+'))';
end;
Mas quando vai para fazer a esquisa apresenta erro, o select está assim:
procedure Tfrm_cadastro.Filtro;
begin
ShortDateFormat:='dd/mm/yyyy';
with ADOQueryFiltro do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select a.nome, a.telefone, a.codigo, a.data_nascimento, a.codcidade, b.codcidade, b.cidade'+
            '  from clientes  a, cidades b where (a.codcidade=b.codcidade)'+  CamposFiltro()+')';
    Active:=True;
  end;
end;

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Ele dá a mensagem "Data type mismatch in criteria expression" acredito que isso se deva ao fato de eu estar jogando uma string como parametro para uma data, mas eu tentei assim também

Result:=Result +'and(a.data_nascimento between (#'+ QuotedStr(MaskNasc.Text)+' #)and(#'+QuotedStr(MaskFinal.Text)+'#))';

Mas aí retorna a mensagem:

"Sintax error in date in query expression 'and(a.data_nascimento between (#'01/01/98'#)and(#'31/12/98'#))'"

De que forma poderia ser feito, como se fosse colocar diretamente o conteúdo de um maskedit no parametro do select?

assim:

SQL.Add('Select a.nome, a.telefone, a.codigo, a.data_nascimento, a.codcidade, b.codcidade, b.cidade'+
'  from clientes  a, cidades b where (a.codcidade=b.codcidade)and (a.data_nascimento = '+  MaskEdit1.text+'))';

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

  • 0
Ele dá a mensagem "Data type mismatch in criteria expression" acredito que isso se deva ao fato de eu estar jogando uma string como parametro para uma data, mas eu tentei assim também

Result:=Result +'and(a.data_nascimento between (#'+ QuotedStr(MaskNasc.Text)+' #)and(#'+QuotedStr(MaskFinal.Text)+'#))';

Mas aí retorna a mensagem:

"Sintax error in date in query expression 'and(a.data_nascimento between (#'01/01/98'#)and(#'31/12/98'#))'"

O operador Between pode ser usado para especificar um critério de seleção, por exemplo:

SELECT Campo 1 FROM Nome_Da_Tabela WHERE Campo 2 BETWEEN Valor 1 AND Valor 2.

SELECT ITEM_NUM, DATA, DESCRICAO, QUANT, VAL_UNIT

FROM Produtos

WHERE DATA BETWEEN '01/07/2009' AND '10/07/2009'

observe como deverá estar a instrução SQL ... se voce for passar um valor de data para a SQL , veja que há a necessidade de se imprimir um apostrofe abrindo e fechando a string da data

então ficaria algo assim

query1.SQL.Clear;
query1.SQL.append('SELECT ITEM_NUM, DATA, DESCRICAO, QUANT, VAL_UNIT ' +
                  'FROM Produtos ' +
                  'WHERE  DATA BETWEEN ' + '''' + MaskEdit1.text + '''' + ' AND ' + '''' + MaskEdit2.text + '''' );

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas, coloquei o selectcomo sugerido, mas retorna o erro "Tipo de dados incompativel na expresão do critério" o select ficou assim:

procedure Tfrm_cadanimais.Filtro;
begin
ShortDateFormat:='dd/mm/yyyy';
with ADOQueryFiltro do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select a.id_animal, a.id_cliente, a.nome_animal, a.especie, a.raca,'+
            'a.cor, a.data_nascimento, a.sexo, a.condicao, c.codigocli, c.nomecli, c.telefone,'+
            'e.id_especie, e.especie, r.id_raca, r.raca from  animais a, clientes c,'+
            'especie e, racas r where (c.codigocli=a.id_cliente)and(a.especie=e.id_especie)and(a.raca=r.id_raca)' +
            ' and a.data_nascimento BETWEEN ' + '''' +MaskNascFiltro.text+ '''' + ' AND ' + '''' +MaskFinalFiltro.text+ '''' );
    Active:=True;
  end;
end;

Os MaskEdit estão com 4 dígitos no ano.

O que poderia ser ?

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

  • 0
Olá Jhonas, coloquei o selectcomo sugerido, mas retorna o erro "Tipo de dados incompativel na expresão do critério"

Acho que voce terá que fazer uma conversão de tipos

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var s, s1 : string;
begin
   s := formatdatetime('mm/dd/yyyy', StrToDate(MaskEdit1.Text));
   s1:= formatdatetime('mm/dd/yyyy', StrToDate(MaskEdit2.Text));
   Query1.Active := false;
   Query1.SQL.Clear;
   Query1.SQL.append('SELECT * FROM Produtos ' +
   'WHERE  DATA BETWEEN ' + '''' + s + '''' + ' AND ' + '''' + s1 + '''' );
   
   showmessage(Query1.SQL.Text); // usado para verificar se a instrução está correta
   
   Query1.Active := true;
end;

Acho que dessa maneira resolve

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas, deu certo aqui assim, seguindo a sua dica de formatar a data antes, mas só foi, colocando o cerquilho:

procedure TForm1.Button1Click(Sender: TObject);
var s, s1 : string;
begin
   s := formatdatetime('mm/dd/yyyy', StrToDate(MaskEdit1.Text));
   s1:= formatdatetime('mm/dd/yyyy', StrToDate(MaskEdit2.Text));
   Query1.Active := false;
   Query1.SQL.Clear;
   Query1.SQL.append('SELECT * FROM Produtos ' +
   'WHERE  DATA BETWEEN ' + '#' + s + '#' + ' AND ' + '#' + s1 + '#' );
    Query1.Active := true;
end;

Cara, muito obrigado pela disposição e pela atenção.

Abraço!!!

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...