Parametros do Delphi para o Rave
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 ?
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
Curtidas 0
Respostas
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
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_DAVGOSTEI 0
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.
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
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.
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
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;
zQuery.Parambyname('DATAI').ASDATE := pesqData1.DATE;
zQuery.Parambyname('DATAF').ASDATE := pesqData2.DATE;
GOSTEI 0
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;
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
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);
zQuery.Parambyname('DATAI').asstring := FormatDateTime('dd-mmm-yyyy',pesqData1.DATE);
zQuery.Parambyname('DATAF').asstring := FormatDateTime('dd-mmm-yyyy',pesqData2.DATE);
GOSTEI 0
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);
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
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;
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
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;
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
21/11/2012
Colega esse campo é do tipo Date no tabela?
GOSTEI 0
Willian Pavan
21/11/2012
Colega esse campo é do tipo Date no tabela?
É do tipo DATE
GOSTEI 0
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:
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
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
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
21/11/2012
E ai Bruno, wllfl....
Alguma Dica?
Alguma Dica?
GOSTEI 0
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
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.
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
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:
minha Query no driverdataview do rave:
e minha queryparams também no rave:
Funcionou certinho...Obrigado :D
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