SQL

21/05/2010

Utilizo um TSQLQUERY do DBEXPRESS, veja bem a minha dúvida: tenho o seguinte SQL: DM1.QQuery.Close; DM1.QQuery.SQL.Clear; DM1.QQuery.SQL.Add('UPDATE CLIENTE SET '+ 'RAZAOSOCIALCLIENTE =:P02, '+ 'TIPOPESSOACLIENTE =:P03, '+ 'EMAILCLIENTE =:P04 '+ 'WHERE CODIGOCLIENTE =:P01'); DM1.QQuery.ParamByName('P01').AsInteger := 1; DM1.QQuery.ParamByName('P02').AsString := 'Helio'; DM1.QQuery.ParamByName('P03').AsString := 'J' DM1.QQuery.ParamByName('P04').AsString := 'heliomsi@gmail.com'; a pergunta besta, que não estou conseguindo, é a seguinte: Tem com obter de DM1.QQuery o SQL todo montado da seguinte forma tipo: var sTexto: String; begin sTexto := DM1.QQuery.Text; //sTexto= { 'UPDATE CLIENTE SET '+ 'RAZAOSOCIALCLIENTE = 'Helio', '+ 'TIPOPESSOACLIENTE = 'J' , '+ 'EMAILCLIENTE = 'heliomsi@gmail.com' '+ 'WHERE CODIGOCLIENTE = 1 ' } end;
Hélio Marques

Hélio Marques

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

21/05/2010

Olá amigo,
 Veja bem a propriedade SQL é do tipo TWideStrings, esta por sua vez é uma classe que armazena o conteúdo adicionado na sua query, ou seja ele vai exibir os parametros e não o conteúdo. Já tentou não usar parametros? Passar direito o conteúdo. veja abaixo :

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  P1, P2, P3 : String;
begin
  with SQLQuery1 do
  begin
    Close;
    P1 := '1';
    P2 := '1';
    P3 := 'CURSOX01';
    SQL.Add(' UPDATE CURSO SET    '+
            ' IDUNIDADE = ' + P2 + ' ,   '+
            ' DESCRICAO = ' + QuotedStr(P3) +
            ' WHERE IDCURSO = '+ P1 );
    ExecSQL;
  end;

end;

Desta forma você poderia pegar, extamente o Script da seguinte forma

ShowMessage(SQLQuery1.SQL.Text);

Espero que isso lhe ajude,

Um abraço

Wesley Y
GOSTEI 0
Hélio Marques

Hélio Marques

21/05/2010

Wesley, este é o detalhe, não gostaria de refazer as QUERYS da forma como você explicitou . Gostaria aproveitar como estão e pegar o conteúdo com seus parâmetros e enviar para o servidor pra ser executado. Como você fez resolve, mas não atende o que desejo, que é exatamente pegar o que já está feito, isso: DM1.QQuery.SQL.Add('UPDATE CLIENTE SET RAZAOSOCIALCLIENTE =:P02, TIPOPESSOACLIENTE =:P03, EMAILCLIENTE =:P04 WHERE CODIGOCLIENTE =:P01'); DM1.QQuery.ParamByName('P01').AsInteger := 1; DM1.QQuery.ParamByName('P02').AsString := 'Helio'; DM1.QQuery.ParamByName('P03').AsString := 'J'; DM1.QQuery.ParamByName('P04').AsString := 'heliomsi@gmail.com'; e capturar em uma variável: sTexto= 'UPDATE CLIENTE SET '+ 'RAZAOSOCIALCLIENTE = 'Helio', '+ 'TIPOPESSOACLIENTE = 'J' , '+ 'EMAILCLIENTE = 'heliomsi@gmail.com' '+ 'WHERE CODIGOCLIENTE = 1 ';
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

21/05/2010

Olá amigo,
  Desta forma ainda não consegui fazer funcionar, seria bem interessante realmente, pegar e substituir o parametro pelo conteúdo, a única forma que vejo ate o momento, seria você dar um StringReplace e substituir o parametro pelo seu valor. ok ? Varria a WideString mas não encontrei um mecanismo para tal feito, tentei até com o SQLMonitor, porém ele gera os parametros como " ? ", pior do que utilizar o StringReplace, então melhor opção seria você fazer uma rotina para substituir com o StringReplace.

Um abraço

Wesley Y
GOSTEI 0
Hélio Marques

Hélio Marques

21/05/2010

OK, vou analisar esta solução, já que não tem com captar o conteúdo do SQL. Ver o impacto aqui na produção. Agradeço.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

21/05/2010

OK amigo,

Até a próxima.

Um abraço

Wesley Y
GOSTEI 0
Hélio Marques

Hélio Marques

21/05/2010

Sim, um abraço ; Pode fechar.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

21/05/2010

Ok amigo,

Um abraço

Wesley Y
GOSTEI 0
POSTAR