Visualizar instrução SQL

Delphi

13/06/2013

Bom dia PEssoal, gostaria de saber como eu faço para ver uma instrução sql q o componente irá executar depois que eu passar os paraemtros.

Exemplo se eu peço para o sistema mostrar para mim a query.sql.text eu vejo a query com os parametros :parametro , só que eu gostaria de ver o valor que passei para o :parametro, é possível??
Aercio Rego

Aercio Rego

Curtidas 0

Respostas

Integral Ltda

Integral Ltda

13/06/2013

Seria isso?

ShowMessage(Query1.Params[0].AsString);
GOSTEI 0
Aercio Rego

Aercio Rego

13/06/2013

na verdade queria tipo isso aqui

    qrServidor.CLOSE;
    qrServidor.SQL.CLEAR;
    qrServidor.SQL.Add('insert into c000032');
    qrServidor.SQL.add('(codigo,codnota,serial,numeronota,');
    qrServidor.SQL.add('codproduto,qtde,movimento_estoque,unitario,desconto,acrescimo,');
    qrServidor.SQL.add('total,unidade,aliquota,');
    qrServidor.SQL.add('cupom_item,cupom_numero,cupom_modelo,');
    qrServidor.SQL.add('ecf_serie,ecf_caixa,codcliente,codvendedor,movimento,data,cst,');
    qrServidor.sql.add('base_calculo, valor_icms)');
    qrServidor.SQL.add('values');

    qrServidor.SQL.add('(:codigo,:codnota,:serial,:numeronota,');
    qrServidor.SQL.add(':codproduto,:qtde,:movimento_estoque,:unitario,:desconto,:acrescimo,');
    qrServidor.SQL.add(':total,:unidade,:aliquota,');
    qrServidor.SQL.add(':cupom_item,:cupom_numero,:cupom_modelo,');
    qrServidor.SQL.add(':ecf_serie,:ecf_caixa,:codcliente,:codvendedor,:movimento,:data,:cst,');
    qrServidor.sql.add(':base_calculo, :valor_icms)');

    qrServidor.Params.ParamByName('CODIGO').ASSTRING      := frmPrincipal.codifica('000032',10);
    qrServidor.Params.ParamByName('CODNOTA').ASSTRING     := scod_venda;
    qrServidor.Params.ParamByName('SERIAL').ASSTRING      := '';
    qrServidor.Params.ParamByName('NUMERONOTA').ASSTRING  := zerar(scod_cupom,6);
    qrServidor.Params.ParamByName('CODPRODUTO').ASSTRING  := zerar(qrS4.fieldbyname('cod_produto').asstring,6);
    qrServidor.Params.ParamByName('QTDE').ASFLOAT := qrS4.FIELDBYNAME('QTDE').ASFLOAT;
    qrServidor.Params.ParamByName('MOVIMENTO_ESTOQUE').ASFLOAT := -qrS4.FIELDBYNAME('QTDE').ASFLOAT;
    qrServidor.Params.ParamByName('unitario').AsFloat := qrS4.fieldbyname('unitario').asfloat;
    qrServidor.Params.ParamByName('desconto').asFloat := 0;
    qrServidor.Params.ParamByName('acrescimo').asFloat := 0;
    qrServidor.Params.ParamByName('total').asFloat := qrS4.fieldbyname('total').asfloat;
    qrServidor.Params.ParamByName('UNIDADE').ASSTRING  := 'UN';
    qrServidor.Params.ParamByName('ALIQUOTA').ASFLOAT := 0;
    qrServidor.Params.ParamByName('CUPOM_ITEM').ASSTRING  := '';
    qrServidor.Params.ParamByName('CUPOM_NUMERO').ASSTRING  := zerar(scod_cupom,6);
    qrServidor.Params.ParamByName('CUPOM_MODELO').ASSTRING  := '2D';
    qrServidor.Params.ParamByName('ECF_SERIE').ASSTRING  := 'nao fiscal';
    qrServidor.Params.ParamByName('ECF_CAIXA').ASSTRING  := '';
    qrServidor.Params.ParamByName('CODCLIENTE').ASSTRING  := zerar(qrS1.FIELDBYNAME('CLIENTE').ASSTRING,6);
    qrServidor.Params.ParamByName('CODVENDEDOR').ASSTRING := zerar(qrS1.FIELDBYNAME('operador').ASSTRING,6);
    qrServidor.Params.ParamByName('MOVIMENTO').ASINTEGER  := 2;
    qrServidor.Params.ParamByName('DATA').ASDATETIME  := qrS1.FIELDBYNAME('DATA').ASDATETIME;
    qrServidor.Params.ParamByName('CST').ASSTRING  := '000';
    qrServidor.Params.ParamByName('base_calculo').asFloat := qrS4.fieldbyname('total').asfloat;
    qrServidor.Params.ParamByName('valor_icms').asFloat := 0;


queria transformar isso aí em um showmessage para que eu visse algo assim 'insert into c000032(campoA, campoB, ..., campoN) values ('valorA','valorB',...,'ValorN');

eu só consigo ver 'insert into c000032(campoA, campoB, ..., campoN) values (:paramA,:paramB,...,paramN);
GOSTEI 0
Guilherme Wiethaus

Guilherme Wiethaus

13/06/2013

Olá Caro Programador.

Eu tenho uma solução que sua ideia me despertou interesse. Caso você não tenha uma propriedade ou método do componente a qual precise para pegar diretamente os dados colocados no parâmetro e montar o seu SQL.

Primeiramente o "Parameter" é montado pelo componente no momento da execução. Nos Scripts de SQL como o T-SQL do SQL Server não existe este tal de :Parametro1, ... Isto é um recurso de "Parse" que o componente possui de ler o script e juntar o nome com a lista de registros contidos nos parâmetros.

Bem, uma solução que eu proponho, poderia se usar uma função construída por você a qual você pega cada parâmetro em um laço e lê o script em SQL.Text e ao achar :Parametro1 substitui pelo conteúdo em qrServidor.Params.ParamByName('Parametro1').Value antes precisa usar junto outro recurso para converter um tipo determinado (definido no parâmetro) para o tipo String para montar a sua SQL completa.

Espero que consiga ter entendido a ideia aqui que eu tento colocar. Eu faria tal função, embora esta semana estou com pouco tempo para trabalhar no meu projeto. num momento oportuno tentarei postar aqui a solução melhor na forma escrita de código o que não é algo difícil de se fazer. Só não encare como uma promessa.

Abraços.

GOSTEI 0
José

José

13/06/2013

Olá aercio de melo paris rego, teve algum avanço ou conseguiu solucionar sua duvida ?
GOSTEI 0
POSTAR