Passar valor de um parametro para um SELECT DINAMICO !!

27/12/2009

4

Boa Tarde !!! Estou usando D2009 + DBX 4 + FB2.1. Galera é o seguinte, estou desenvolvendo um relatório e neste possui varios combos aonde o usuario seleciona se necessario e a rotina pega o valor e joga no SELECT. Estava funcionando perfeito até o momento que precisei usar datas, o campo data é o único campo obrigatório para gerar a consulta porem não esto conseguindo passar o valor para o parametro, o resto do select funciona perfeito. Tenho um componete CLIENTDATASET aonde com um TStringList passo o valor para a propriedade COMMAND TEXT. Segue ó código abaixo. procedure TfrmAcompanhamentoProducao.btnGerarConsultaClick(Sender: TObject);
var
 S1: TStringList;
begin
  S1 := TStringList.Create;   S1.Add('select cli.id_cliente, cli.nome, cli.cpf, vnd.data_venda, vnd.nome_agente, vnd.nome_banco,');
  S1.Add('vnd.nome_produto,vnd.nome_tabela,vnd.plano_atl,vnd.porcentagem_paga,vnd.valor_refin,vnd.valor_parcela,');
  S1.Add('vnd.valor_liberado,vnd.status_proposta,vnd.responsavel_lancamento,vnd.comissao_rec_banco,');
  S1.Add('vnd.comissao_rec_promotora,vnd.comissao_rec_agente,vnd.porcentagem_banco,vnd.porcentagem_promotora,');
  S1.Add('vnd.porcentagem_agente,vnd.plano_ant from clientes cli, vendas vnd');
  S1.Add('where (cli.id_cliente = vnd.id_cliente)and vnd.data_venda between :DATAINI and :DATAFIM');
  If dbeNomeBanco.Text <> EmptyStr then
   S1.Add('and vnd.nome_banco ='+QuotedStr(dbeNomeBanco.Text));   If dbeNomeProduto.Text <> EmptyStr then
   S1.Add('and vnd.nome_produto ='+QuotedStr(dbeNomeProduto.Text));   If edtNomeTabela.Text <> EmptyStr then
   S1.Add('and vnd.nome_tabela ='+QuotedStr(edtNomeTabela.Text));   If edtStatus.Text <> EmptyStr then
   S1.Add('and vnd.status_proposta ='+QuotedStr(edtStatus.Text));    cdsConsultaContratos.Close;
   cdsConsultaContratos.CommandText := S1.Text;
   cdsConsultaContratos.Open;    FreeAndNil(S1);
No ibexpert roda perfeito, eu não estou sabendo passar o valor da DATAINI e DATAFIM para o select. Preciso disto urgente preciso entregar isto na terça-feira. Conto com a ajuda de vcs. Obrigado e abraços.
Responder

Posts

28/12/2009

Luis Godinho

Tente usar a função QuotedStr na seleção da data ao invês de párametro.     S1.Add('where (cli.id_cliente = vnd.id_cliente)and vnd.data_venda between '+QuotedStr('MM/DD/YYYY')+' and '+QuotedStr('MM/DD/YYYY'));
Acredito que funcionará assim.       http://www.delphiwork.blogspot.com/
Responder
Obrigado meu caro pela resposta !!   Mas ainda não funcionando ele não gera erro mas tambem não traz nenhum valor em grid, mesmo tendo lançamentos no periodo informado.   Abraços.
Responder
Caro Luis, Boa Tarde !!! Obrigado mesmo, o que você sugeriou me ajudou bastante, estava faltando informar o valor do parametro que eu estava meio perdido, segue o código abaixo caso alguem mas tenha a mesma dúvida.   Caro Moderador, Boa Tarde !!

Obrigado pela grande ajuda, o problema estas 100% resolvido.

Segue o código abaixo para se alguem tiver a mesma dúvida de como montar um SELECT DINAMICO.

procedure TfrmAcompanhamentoProducao.btnGerarConsultaClick(Sender: TObject);
var
S1: TStringList;
begin
S1 := TStringList.Create;

S1.Add('select cli.id_cliente, cli.nome, cli.cpf, vnd.data_venda, vnd.nome_agente, vnd.nome_banco,');
S1.Add('vnd.nome_produto,vnd.nome_tabela,vnd.plano_atl,vnd.porcentagem_paga,vnd.valor_refin,vnd.valor_parcela,');
S1.Add('vnd.valor_liberado,vnd.status_proposta,vnd.responsavel_lancamento,vnd.comissao_rec_banco,');
S1.Add('vnd.comissao_rec_promotora,vnd.comissao_rec_agente,vnd.porcentagem_banco,vnd.porcentagem_promotora,');
S1.Add('vnd.porcentagem_agente,vnd.plano_ant from clientes cli, vendas vnd');
S1.Add('where (cli.id_cliente = vnd.id_cliente)and vnd.data_venda between '+QuotedStr(FormatDateTime('mm/dd/yyyy',edtDataIni.Date)));
S1.Add('and'+ QuotedStr(FormatDateTime('mm/dd/yyyy',edtDataFim.Date)));

If dbeNomeBanco.Text <> EmptyStr then
S1.Add('and vnd.nome_banco ='+QuotedStr(dbeNomeBanco.Text));

If dbeNomeProduto.Text <> EmptyStr then
S1.Add('and vnd.nome_produto ='+QuotedStr(dbeNomeProduto.Text));

If edtNomeTabela.Text <> EmptyStr then
S1.Add('and vnd.nome_tabela ='+QuotedStr(edtNomeTabela.Text));

If edtStatus.Text <> EmptyStr then
S1.Add('and vnd.status_proposta ='+QuotedStr(edtStatus.Text));

cdsConsultaContratos.Close;
cdsConsultaContratos.CommandText := S1.Text;
cdsConsultaContratos.Open;

FreeAndNil(S1);

Abraços e boas festas.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira