Filtro no Rave Report

Delphi

05/11/2013

Galera, sou novato tanto no rave quanto no Delphi.
Estou fazendo um filtro e jogando para SdsVendas (TSQLDATASET) com o command text, para filtrar no banco de dados e receber a informação de vendas do dia escolhido pelo cliente.

tenho um DATASOURCE no meu form, dois maskedit e um button.

quero que o cliente coloque a data desejada e clique no botão, para saber as vendas apenas dessa data. Fiz o seguinte select


Rm.sDSVendas.CommandText := 'select *from venda v where v.data >= '+MeDtInicial.Text+' AND v.data <= '+MeDtFinal.Text;
RM.RvProj.ExecuteReport('VendasRealizadas');


onde eu estou errando, poderiam me ajudar?
Ricardo Lima

Ricardo Lima

Curtidas 0

Respostas

Ricardo Lima

Ricardo Lima

05/11/2013

o form completo e o seguinte

unit UfrmConsultaVenda;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls,
Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.ComCtrls;

type
TFrmConsultaVenda = class(TForm)
MeDtInicial: TMaskEdit;
MeDtFinal: TMaskEdit;
Button1: TButton;
DsVendaC: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmConsultaVenda: TFrmConsultaVenda;

implementation

{$R *.dfm}

uses uRM;


procedure TFrmConsultaVenda.Button1Click(Sender: TObject);
begin

Rm.sDSVendas.CommandText := 'select *from venda v where v.data >= '+MeDtInicial.Text+' AND v.data <= '+MeDtFinal.Text;
RM.RvProj.ExecuteReport('VendasRealizadas');


end;

end.
GOSTEI 0
Marcos Saffran

Marcos Saffran

05/11/2013

o form completo e o seguinte

unit UfrmConsultaVenda;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls,
Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.ComCtrls;

type
TFrmConsultaVenda = class(TForm)
MeDtInicial: TMaskEdit;
MeDtFinal: TMaskEdit;
Button1: TButton;
DsVendaC: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmConsultaVenda: TFrmConsultaVenda;

implementation

{$R *.dfm}

uses uRM;


procedure TFrmConsultaVenda.Button1Click(Sender: TObject);
begin

Rm.sDSVendas.CommandText := 'select *from venda v where v.data >= '+MeDtInicial.Text+' AND v.data <= '+MeDtFinal.Text;
RM.RvProj.ExecuteReport('VendasRealizadas');


end;

end.

Olá Ricardo,
tente assim:
Rm.sDSVendas.CommandText := 'select *from venda v where v.data >= '+MeDtInicial.Text+' AND v.data <= '+MeDtFinal.Text;
if Rm.sDSVendas.Active then
  Rm.sDSVendas.Active := False;
Rm.sDSVendas.Active := True;
RM.RvProj.ExecuteReport('VendasRealizadas');


aqui o SQLDataSet foi fechado e aberto para poder pegar os dados do commandtext, no meu programa eu também faço isso com o clientdataset, antes de executar o relatório.
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

Entendi, quando chegar do trabalho vou testar e aviso.
Obrigado
GOSTEI 0
Paulo Freire

Paulo Freire

05/11/2013

No seu select separe o * do from.
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

FAREI ISSO
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

Pessoal, descobri um erro e resolvi. no meu dspvendas a propriedade do DataSetProvidor poAllowCommandText estava false. mudei para True

agora está me passando o seguinte erro:


"TOKEN UNKNOWN - LINE 1, COLUMN 39
1"

Meu codigo está assim:

Rm.cDSVendas.CommandText := 'select * from venda v where v.data >= 19.06.2013 AND v.data <= 19.06.2013';

 if Rm.cDSVendas.Active then
Rm.CDSVendas.Active := False;
Rm.CDSVendas.Active := True;


ShowMessage(MeDtInicial.Text);
RM.RvProj.ExecuteReport('VendasRealizadas');
.


Pelo que pesquisei e erro de sintaxe, mas não consigo achar o erro.

Podem me ajudar?

Antes que me esqueça, estou usando dois TMaskEdit para a digitação do usuario
GOSTEI 0
Marcos Saffran

Marcos Saffran

05/11/2013

Olá Ricardo,

tente as dadas nesses formatos: aaaa-mm-dd ou dd-mm-aaaa, não se esqueça que do separador '-'.
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

ficou assim:
Rm.cDSVendas.CommandText := 'select * from venda v where v.data >= 2013-06-19 AND v.data <= 2013-06-19';

if Rm.cDSVendas.Active then
Rm.CDSVendas.Active := False;
Rm.CDSVendas.Active := True;

RM.RvProj.ExecuteReport('VendasRealizadas');


Também tentei invertendo as datas.

Porém, deu o seguinte erro:

expression evaluation not supported
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

NUSSSSSSS, consegui aqui...
Bem, consegui parcialmente. Quanto eu coloco duas datas iguais, o sistema puxa certinho, más quando eu coloco duas datas diferente (de, ate); vem tudo em branco...

alguém poderia me dizer o pq?


segue codigo

var
  S: String;
begin
  RM.CDSVendas.Close;
  S := 'select * from venda v where v.data <= ' + QuotedStr(MeDtInicial.Text)
    + ' and v.data >= ' + QuotedStr(MeDtFinal.Text);
  RM.CDSVendas.CommandText := S;
  RM.CDSVendas.Open;
  RM.RvProj.ExecuteReport('VendasRealizadas');
  S := EmptyStr;



ai galera, muito obrigado pela ajuda...
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

já descobri o erro, no select quando eu coloquei <= e >= eu inverti....

deveria ser >= e <=


obrigado gente...


este post já está resolvido....
GOSTEI 0
Marcos Saffran

Marcos Saffran

05/11/2013

NUSSSSSSS, consegui aqui...
Bem, consegui parcialmente. Quanto eu coloco duas datas iguais, o sistema puxa certinho, más quando eu coloco duas datas diferente (de, ate); vem tudo em branco...

alguém poderia me dizer o pq?


segue codigo

var
  S: String;
begin
  RM.CDSVendas.Close;
  S := 'select * from venda v where v.data <= ' + QuotedStr(MeDtInicial.Text)
    + ' and v.data >= ' + QuotedStr(MeDtFinal.Text);
  RM.CDSVendas.CommandText := S;
  RM.CDSVendas.Open;
  RM.RvProj.ExecuteReport('VendasRealizadas');
  S := EmptyStr;



ai galera, muito obrigado pela ajuda...

Olá Ricardo, tente trocar o '<=' antes do MeDtInivial' por '>=' e trocar o '>=' antes do 'MedtFinal' por '<=', pois do jeito que está está tentando buscar as datas que são menores ou iguais à data inicial e as datas que são maiores ou iguais à data final.
GOSTEI 0
Marcos Saffran

Marcos Saffran

05/11/2013

Desculpe-me, não vi que você já havia resolvido.
GOSTEI 0
Ricardo Lima

Ricardo Lima

05/11/2013

BLZ, VLW
GOSTEI 0
POSTAR