Parametros do Delphi para o Rave

Delphi

21/11/2012

Bom dia pessoal,

minha duvida é a seguinte,

Fiz um relatório de comissão de vendedores, ele esta funcionando perfeitamente, porém preciso que ele filtre por datas.

No rave estou utilizando o DriverDataView, e no delphi coloquei dois DataTimePicker ( o dataI e dataF )

como faço para passar esses parametros para o rave ?
Willian Pavan

Willian Pavan

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

21/11/2012

Como está fazendo a chamada do dataset, pois você tem que criar uma rotina no dataset e passar o seu componente de data como os paramentros.
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Como está fazendo a chamada do dataset, pois você tem que criar uma rotina no dataset e passar o seu componente de data como os paramentros.


Bom dia Alisson, eu fiz o seguinte, criei esses parametros na minha query: (ele não esta apresentando nenhum erro, porem não me traz nenhum dado)

zQuery.Parambyname('DATAI').ASDATE := pesqData1.DATE;
zQuery.Parambyname('DATAF').ASDATE := pesqData2.DATE;


e a minha SQL é essa:

SELECT
  T1.NUMERO,
  T1.DATA_DAV,
  T1.VENDEDOR,
  T1.VALOR_TOT_PRO,
  T1.VALOR_TOT_DAV,
  T1.CLIENTE,
  T3.CODIGO,
  T3.NOME AS NOMECLIE,
  T2.NOME,

  CAST ((T1.VALOR_TOT_PRO * T2.COMISSAOV /100) AS NUMERIC(15,2)) AS CPROD,
  CAST (((T1.VALOR_TOT_DAV) * T2.COMISSAOV) /100 AS NUMERIC(15,2)) AS CNOTA,
  CAST ((T1.VALOR_TOT_DAV ) AS NUMERIC(15,2)) AS BCOMISAO,
  CAST ((T1.VALOR_TOT_DAV * T2.COMISSAOV /100)/(T1.VALOR_TOT_DAV)*100 AS NUMERIC(15,2)) AS PERCOM
FROM
    CABDAV T1, VENDEDOR T2, CLIENTE T3
WHERE
  T1.VENDEDOR = T2.NOME  AND
  T1.CLIENTE = T3.CODIGO AND
  T1.VALOR_TOT_DAV <> '0'  AND
  T1.DATA_DAV BETWEEN  :DATAI AND :DATAF
ORDER BY
  T1.VENDEDOR,
  T1.DATA_DAV


GOSTEI 0
William

William

21/11/2012

Colega é sempre bom perguntar, vc testou essa instrução SQL direto no banco, passando as datas na própria instrução?

Não sei qual SGBD vc está usando, por exemplo, quando escrevo instruções SQL primeiro testo no IBExpert(Firebird), se funcionar transfiro para o delphi.

Caso não funcione no delphi, debugo a aplicação acompanhando a passagem de parâmetros geralmente é nesse ponto que dá problema.
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Colega é sempre bom perguntar, vc testou essa instrução SQL direto no banco, passando as datas na própria instrução?

Não sei qual SGBD vc está usando, por exemplo, quando escrevo instruções SQL primeiro testo no IBExpert(Firebird), se funcionar transfiro para o delphi.

Caso não funcione no delphi, debugo a aplicação acompanhando a passagem de parâmetros geralmente é nesse ponto que dá problema.


Olá Amigo,

Meu banco de dados é Firebird e executei no próprio IBExpert e funcionou certinho, quando executei ele me pediu as datas (DATAI e DATAF que são meus parametros) e listou perfeitamente.
GOSTEI 0
Bruno Leandro

Bruno Leandro

21/11/2012

Ola Willian tente debugar esse trexo e veja qual informação os parametros abaixo estao recebendo, outro ponto e no momento que voce abre a query, veja a propriedade recordcount da query, o valor retornado.

zQuery.Parambyname('DATAI').ASDATE := pesqData1.DATE;
zQuery.Parambyname('DATAF').ASDATE := pesqData2.DATE;
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Ola Willian tente debugar esse trexo e veja qual informação os parametros abaixo estao recebendo, outro ponto e no momento que voce abre a query, veja a propriedade recordcount da query, o valor retornado.

zQuery.Parambyname('DATAI').ASDATE := pesqData1.DATE;
zQuery.Parambyname('DATAF').ASDATE := pesqData2.DATE;


Vou tentar fazer isso, mas acho que ja sei oque pode ser.
se coloco para fazer a verificação da data dessa maneira ele não da certo:
 T1.DATA_DAV BETWEEN '28/10/2012' AND '22/11/2012'


porem se coloco dessa maneira ele funciona certinho
T1.DATA_DAV BETWEEN '28-OCT-2012' AND '28-NOV-2012'


só não sei como faço para o meu parametro receber a data dessa maneira
GOSTEI 0
Bruno Leandro

Bruno Leandro

21/11/2012

ok, entao tenta assim

zQuery.Parambyname('DATAI').asstring := FormatDateTime('dd-mmm-yyyy',pesqData1.DATE);
zQuery.Parambyname('DATAF').asstring := FormatDateTime('dd-mmm-yyyy',pesqData2.DATE);
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

ok, entao tenta assim

zQuery.Parambyname('DATAI').asstring := FormatDateTime('dd-mmm-yyyy',pesqData1.DATE);
zQuery.Parambyname('DATAF').asstring := FormatDateTime('dd-mmm-yyyy',pesqData2.DATE);


Fiz como você me passou, ele não apresenta nenhum erro, mais não traz nenhum dado
GOSTEI 0
Bruno Leandro

Bruno Leandro

21/11/2012

olha willian tenta desta forma

zQuery.close;
zQuery.sql.clear;
zQuery.sql.text := ' SELECT ' +
' T1.NUMERO, ' +
' T1.DATA_DAV, ' +
' T1.VENDEDOR, ' +
' T1.VALOR_TOT_PRO, ' +
' T1.VALOR_TOT_DAV, ' +
' T1.CLIENTE, ' +
' T3.CODIGO, ' +
' T3.NOME AS NOMECLIE, ' +
' T2.NOME, ' +

' CAST ((T1.VALOR_TOT_PRO * T2.COMISSAOV /100) AS NUMERIC(15,2)) AS CPROD, ' +
' CAST (((T1.VALOR_TOT_DAV) * T2.COMISSAOV) /100 AS NUMERIC(15,2)) AS CNOTA, ' +
' CAST ((T1.VALOR_TOT_DAV ) AS NUMERIC(15,2)) AS BCOMISAO, ' +
' CAST ((T1.VALOR_TOT_DAV * T2.COMISSAOV /100)/(T1.VALOR_TOT_DAV)*100 AS NUMERIC(15,2)) AS PERCOM ' +
' FROM ' +
' CABDAV T1, VENDEDOR T2, CLIENTE T3 ' +
' WHERE ' +
' T1.VENDEDOR = T2.NOME AND ' +
' T1.CLIENTE = T3.CODIGO AND ' +
' T1.VALOR_TOT_DAV <> '0' AND ' +
' T1.DATA_DAV BETWEEN '+QuotedStr(FormatDateTime('dd-mmm-yyyy',pesqData1.DATE))+' AND '+QuotedStr(FormatDateTime('dd-mmm-yyyy',pesqData2.DATE)) +
' ORDER BY ' +
' T1.VENDEDOR, ' +
' T1.DATA_DAV ';
zQuery.Open;
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

olha willian tenta desta forma

zQuery.close;
zQuery.sql.clear;
zQuery.sql.text := ' SELECT ' +
' T1.NUMERO, ' +
' T1.DATA_DAV, ' +
' T1.VENDEDOR, ' +
' T1.VALOR_TOT_PRO, ' +
' T1.VALOR_TOT_DAV, ' +
' T1.CLIENTE, ' +
' T3.CODIGO, ' +
' T3.NOME AS NOMECLIE, ' +
' T2.NOME, ' +

' CAST ((T1.VALOR_TOT_PRO * T2.COMISSAOV /100) AS NUMERIC(15,2)) AS CPROD, ' +
' CAST (((T1.VALOR_TOT_DAV) * T2.COMISSAOV) /100 AS NUMERIC(15,2)) AS CNOTA, ' +
' CAST ((T1.VALOR_TOT_DAV ) AS NUMERIC(15,2)) AS BCOMISAO, ' +
' CAST ((T1.VALOR_TOT_DAV * T2.COMISSAOV /100)/(T1.VALOR_TOT_DAV)*100 AS NUMERIC(15,2)) AS PERCOM ' +
' FROM ' +
' CABDAV T1, VENDEDOR T2, CLIENTE T3 ' +
' WHERE ' +
' T1.VENDEDOR = T2.NOME AND ' +
' T1.CLIENTE = T3.CODIGO AND ' +
' T1.VALOR_TOT_DAV <> '0' AND ' +
' T1.DATA_DAV BETWEEN '+QuotedStr(FormatDateTime('dd-mmm-yyyy',pesqData1.DATE))+' AND '+QuotedStr(FormatDateTime('dd-mmm-yyyy',pesqData2.DATE)) +
' ORDER BY ' +
' T1.VENDEDOR, ' +
' T1.DATA_DAV ';
zQuery.Open;


Bruno, ele deu o seguinte erro
' Conversion error from string "30-dez-2012" '
GOSTEI 0
William

William

21/11/2012

Colega esse campo é do tipo Date no tabela?
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Colega esse campo é do tipo Date no tabela?


É do tipo DATE
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Bruno, fiz de uma outra maneira e deu certo, coloquei um Dbgrid para fazer um teste e ele filtrou certinho
porem no rave report, que é o que eu preciso ele sai em branco

segue o codigo abaixo:

valdata1:= DateToStr(pesqData1.date);
valdata2:= DateToStr(pesqData2.date);

DATAI:= copy(valdata1,4,2) + '/' + copy(valdata1,1,2) + '/' + copy(valdata1,7,4);
DATAF:= copy(valdata2,4,2) + '/' + copy(valdata2,1,2) + '/' + copy(valdata2,7,4);





zQuery.close;
zQuery.sql.clear;
zQuery.sql.text := ' SELECT ' +
' T1.NUMERO, ' +
' T1.DATA_DAV, ' +
' T1.VENDEDOR, ' +
' T1.VALOR_TOT_PRO, ' +
' T1.VALOR_TOT_DAV, ' +
' T1.CLIENTE, ' +
' T3.CODIGO, ' +
' T3.NOME AS NOMECLIE, ' +
' T2.NOME, ' +

' CAST ((T1.VALOR_TOT_PRO * T2.COMISSAOV /100) AS NUMERIC(15,2)) AS CPROD, ' +
' CAST (((T1.VALOR_TOT_DAV) * T2.COMISSAOV) /100 AS NUMERIC(15,2)) AS CNOTA, ' +
' CAST ((T1.VALOR_TOT_DAV ) AS NUMERIC(15,2)) AS BCOMISAO, ' +
' CAST ((T1.VALOR_TOT_DAV * T2.COMISSAOV /100)/(T1.VALOR_TOT_DAV)*100 AS NUMERIC(15,2)) AS PERCOM ' +
' FROM ' +
' CABDAV T1, VENDEDOR T2, CLIENTE T3 ' +
' WHERE ' +
' T1.VENDEDOR = T2.NOME AND ' +
' T1.CLIENTE = T3.CODIGO AND ' +
' T1.VALOR_TOT_DAV <> 0 AND ' +
' T1.DATA_DAV >= ' + #39 + DATAI + #39 + 'AND' +
' T1.DATA_DAV <= ' + #39 + DATAF + #39 +
' ORDER BY ' +
' T1.VENDEDOR, ' +
' T1.DATA_DAV ';
zQuery.Open;
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

bruno, fiz de uma outra maneira e deu certo, coloquei um dbgrid para fazer um teste e ele filtrou certinho
porem no rave report, que é o que eu preciso ele sai em branco


Desculpa, erro meu ele não esta saindo em branco, na verdade esta dando uma mensagem de erro "Empty SQL Statement"
isso quando executo o projeto do rave, no grid que coloquei para testar filtrou certinho.
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

E ai Bruno, wllfl....

Alguma Dica?
GOSTEI 0
Bruno Leandro

Bruno Leandro

21/11/2012

voce ja tem outros relatorios no rave funcionando? eu indicaria voce fazer o relatorio do zero pois pode estar passando algum detalhe
GOSTEI 0
William

William

21/11/2012

Cara vc consegui visualizar no Grid, mas no relatório não sai nada, muito estranho isso..

Geralmente passamos somente o DataSet já com todas as informações filtradas para o Rave, não tem erro, vc pode usar o Filter do ClientDataSet ou uma instrução SQL para filtrar os dados.

Teoricamente os dados do relatório deveriam ser o espelho do Grid, se os 2 estiverem usando o mesmo DataSet.

Acho melhor vc seguir o conselho do colega BRUNO e criar novamente esse relatório.
GOSTEI 0
Willian Pavan

Willian Pavan

21/11/2012

Consegui pessoal, obrigado pelas dicas.

Voltei a fazer como estava fazendo antes, utilizando o driverdataview no rave, e passei os seguintes parametros no delphi:

with RvProject1 do
  begin
  SetParam('DATAI',FormatDateTime('dd-mmm-yyyy', edtDataInicial.DateTime));
  SetParam('DATAf',FormatDateTime('dd-mmm-yyyy', edtDataFinal.DateTime));
  end;
  RvProject1.Execute;
end;


minha Query no driverdataview do rave:

SELECT
T1.NUMERO,
T1.DATA_DAV,
T1.VENDEDOR,
T1.VALOR_TOT_PRO,
T1.VALOR_TOT_DAV,
T1.CLIENTE,
T3.CODIGO,
T3.NOME AS NOMECLIE,
T2.NOME,

CAST ((T1.VALOR_TOT_PRO * T2.COMISSAOV /100) AS NUMERIC(15,2)) AS CPROD,
CAST (((T1.VALOR_TOT_DAV) * T2.COMISSAOV) /100 AS NUMERIC(15,2)) AS CNOTA,
CAST ((T1.VALOR_TOT_DAV ) AS NUMERIC(15,2)) AS BCOMISAO,
CAST ((T1.VALOR_TOT_DAV * T2.COMISSAOV /100)/(T1.VALOR_TOT_DAV)*100 AS NUMERIC(15,2)) AS PERCOM
FROM
CABDAV T1, VENDEDOR T2, CLIENTE T3
WHERE
T1.VENDEDOR = T2.NOME AND
T1.CLIENTE = T3.CODIGO AND
T1.VALOR_TOT_DAV <> '0' AND
T1.DATA_DAV BETWEEN :DATAI AND :DATAF
ORDER BY
T1.VENDEDOR,
T1.DATA_DAV


e minha queryparams também no rave:

DATAI=PARAM.DATAI('01/01/1899')
DATAF=PARAM.DATAF('12/31/2100')


Funcionou certinho...Obrigado :D
GOSTEI 0
POSTAR