claukris Postado Novembro 1, 2005 Denunciar Share Postado Novembro 1, 2005 Será que alguém pode me ajudar?Estou com um problema para filtrar todos dados em um intervalo de datas.Tenho um DataModule com componentes Table e Data source. No meu Relatório tenho uma Query.A situação é a seguinte:Preciso que em um form o usuário digite as duas datas e quando clicar em ok, venha o relatório contendo os registros desse período. Já tentei de tudo. Mas o primeiro cod que consegui, por meio de colegas de fórum não gera erro, mas também não exibe nenhum registro no relatórioE o segundo código gera um erro na hora em que chamo o relatório:Type mismatch in expressionOs cód são estes respectivamente:With Form12.Query1 Do BeginClose;SQL.Clear;SQL.Add('SELECT * FROM Duplicatas WHERE ( VENCIMENTO >=:DATAi ) AND ( VENCIMENTO <=:DATAf ) AND' );SQL.Add('( VENCPRI >=:DATAi ) AND ( VENCPRI <=:DATAf ) AND');SQL.Add('( VENCSEG >=:DATAi ) AND ( VENCSEG <=:DATAf ) AND');SQL.Add('( VENCTER >=:DATAi ) AND ( VENCTER <=:DATAf ) AND');SQL.Add('( VENCQUA >=:DATAi ) AND ( VENCQUA <=:DATAf ) AND');SQL.Add('( VENCQUI >=:DATAi ) AND ( VENCQUI <=:DATAf ) AND');SQL.Add('( VENCSEX >=:DATAi ) AND ( VENCSEX <=:DATAf )');SQL.Add('ORDER BY Vencimento');Params[0].AsDateTime := StrToDate(MaskEdit1.Text);Params[1].AsDateTime := StrToDate(MaskEdit2.Text);Open;Form12.QuickRep1.preview;Close;Filtro := Filtro+' WHERE Vencimento Between :pInicio and :pFim' ;Filtro := Filtro+' Order By VENCIMENTO';Form12.Query1.SQL.Clear;Form12.Query1.SQL.Add(Filtro);Form12.Query1.ParamByName('pInicio').AsString := FormatDateTime('dd/mm/yyyy',StrToDate(maskedit1.text));Form12.Query1.ParamByName('pFim').AsString := FormatDateTime('dd/mm/yyyy',StrToDate(maskedit2.text));Form12.Query1.Open;Form12.QuickRep1.preview;form12.query1.close;Quem pode me ajudar? já tentei de tudo..... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bastard2003 Postado Novembro 2, 2005 Denunciar Share Postado Novembro 2, 2005 cara... primeira coisa... qual banco tu ta usando?!?! tipo... o formato de data do bando varia MUITO qué ve... Oracle = DD/MM/AAAA (defaut), SQL Server = MM/DD/AAAA... e assim por diante... esse erro ali... é bem caracteristico de encontrar uma tipo de cado na query e o que ta vindo do select ser outro... tipo na qry tem um integer e do banco ta vindo um float... essas coisas... diz qual o banco ai que fica mais facil de saber!! abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 claukris Postado Novembro 2, 2005 Autor Denunciar Share Postado Novembro 2, 2005 Uso Tables Paradox, e o formato que é armazenado no meu BD é dd/mm/yyyy. Já tentei de tudo, no princípio o meu campo Vencimento era do tipo Date, e agora modifiquei para Alpha, mas não resolveu, já tentei usar todos os tipos de formato para data.....Grata pela dica Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DELPHI-Man32 Postado Novembro 3, 2005 Denunciar Share Postado Novembro 3, 2005 já tentou em um dbgrid antes de chamar o relatorio?tipo!liga o DS no DBgrid! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Wilton Postado Novembro 3, 2005 Denunciar Share Postado Novembro 3, 2005 Tambem acho que você deve ligar esta Query em um DBGrid para ver se realmente não esta retornando nada.Porque se estiver retornando alguma, mas não esta imprimindo, o problema esta na configuração do seu relatório.Faz o teste aí e fala pra gente. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 claukris Postado Novembro 3, 2005 Autor Denunciar Share Postado Novembro 3, 2005 Oi Galera, Valeu pelas dicas, coloquei uma dbgrid para ver o que acontece com os dados, digitei um intervalo de datas que tinha no cadastro, quando chamei o filtro ele não me mostrou nenhum registro na dbgrid, sendo que estes registros dentro do intervalo existem. Então o problema está mesmo no cód, ele não está filtrando corretamente, é como se eu tivesse digitado um intervalo de datas que não existem no meu cadastro.... Tá difícil!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bastard2003 Postado Novembro 3, 2005 Denunciar Share Postado Novembro 3, 2005 faz o seguinte... coloca um SQl.SaveToFile('nomedoarquivo.txt'); antes de abrir a qry que ta recebendo esse codigo.... ai vai no lugar que ta teu executavel do projeto e abre esse arquivo.. ai tu ve como ele ta recebendo a data.. ai fica facil de pega o erro! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 claukris Postado Novembro 3, 2005 Autor Denunciar Share Postado Novembro 3, 2005 valeu as dicas, deu certo o filtro, deixo aqui o cód que usei. A dica da DbGrid foi muito útil.....Obrigada à todos!!!With Form12.Query1 Do BeginClose;SQL.Clear;SQL.Add ('SELECT * FROM Duplicatas WHERE VENCIMENTO BETWEEN :dt1 AND :dt2');SQL.Add('ORDER BY Vencimento');parambyname('dt1').value:=StrToDate(maskedit1.text);parambyname('dt2').value:=strtodate(maskedit2.text);Open;form12.QuickRep1.Preview;close;End; Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
claukris
Será que alguém pode me ajudar?
Estou com um problema para filtrar todos dados em um intervalo de datas.
Tenho um DataModule com componentes Table e Data source.
No meu Relatório tenho uma Query.
A situação é a seguinte:
Preciso que em um form o usuário digite as duas datas e quando clicar em ok, venha o relatório contendo os registros desse período.
Já tentei de tudo.
Mas o primeiro cod que consegui, por meio de colegas de fórum não gera erro, mas também não exibe nenhum registro no relatório
E o segundo código gera um erro na hora em que chamo o relatório:
Type mismatch in expression
Os cód são estes respectivamente:
With Form12.Query1 Do Begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Duplicatas WHERE ( VENCIMENTO >=:DATAi ) AND ( VENCIMENTO <=:DATAf ) AND' );
SQL.Add('( VENCPRI >=:DATAi ) AND ( VENCPRI <=:DATAf ) AND');
SQL.Add('( VENCSEG >=:DATAi ) AND ( VENCSEG <=:DATAf ) AND');
SQL.Add('( VENCTER >=:DATAi ) AND ( VENCTER <=:DATAf ) AND');
SQL.Add('( VENCQUA >=:DATAi ) AND ( VENCQUA <=:DATAf ) AND');
SQL.Add('( VENCQUI >=:DATAi ) AND ( VENCQUI <=:DATAf ) AND');
SQL.Add('( VENCSEX >=:DATAi ) AND ( VENCSEX <=:DATAf )');
SQL.Add('ORDER BY Vencimento');
Params[0].AsDateTime := StrToDate(MaskEdit1.Text);
Params[1].AsDateTime := StrToDate(MaskEdit2.Text);
Open;
Form12.QuickRep1.preview;
Close;
Filtro := Filtro+' WHERE Vencimento Between :pInicio and :pFim' ;
Filtro := Filtro+' Order By VENCIMENTO';
Form12.Query1.SQL.Clear;
Form12.Query1.SQL.Add(Filtro);
Form12.Query1.ParamByName('pInicio').AsString := FormatDateTime('dd/mm/yyyy',StrToDate(maskedit1.text));
Form12.Query1.ParamByName('pFim').AsString := FormatDateTime('dd/mm/yyyy',StrToDate(maskedit2.text));
Form12.Query1.Open;
Form12.QuickRep1.preview;
form12.query1.close;
Quem pode me ajudar? já tentei de tudo.....
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
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.