SQL
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
Curtidas 0
Respostas
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
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
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
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
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
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
21/05/2010
OK amigo,
Até a próxima.
Um abraço
Wesley Y
Até a próxima.
Um abraço
Wesley Y
GOSTEI 0
Hélio Marques
21/05/2010
Sim, um abraço ; Pode fechar.
GOSTEI 0
Wesley Yamazack
21/05/2010
Ok amigo,
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0