procedure TForm1.Button1Click(Sender: TObject);
begin
 with qry1 do
 begin
  close;
  sql.Clear;
  SQL.Add('select * from zd_qyzg where gh=:gh');
  Parameters.ParamByName('gh').Value:='999' ;
   ShowMessage(SQL.DelimitedText);
  Open;
  ShowMessage(SQL.CommaText);
end;
end;如上,想在运行之后看赋值之后的完整sql代码  有办法吗

解决方案 »

  1.   

    应该是没办法
    自己组合下show出来,或者除了将SQL show出来外,同时也将传进去的值也show出来。
      

  2.   


    那就写在每个DataSet的OnBeforeOpen事件中:
    procedure TfmFAIDetail.QryDataBeforeOpen(DataSet: TDataSet);
    var
      i: integer;
      s: string;
    begin
      s := '';
      for i := 0 to QryData.Params.Count - 1 do
        s := s +#13#10+ QryData.Params.Items[i].AsString;
      ShowMessage(s);
      ShowMessage(QryData.CommandText);
    end;
      

  3.   


    只showmessage(s)了下面的还是show不出完整的
      

  4.   


    只showmessage(s)了下面的还是show不出完整的s是Show你传的参数值,最后一句是ShowMessage(SQL.CommaText);显示出SQL的内容。
      

  5.   

    我喜欢Inputbox('','',sql.Text);好处是可以COPY出来直接看。
      

  6.   


    只showmessage(s)了下面的还是show不出完整的s是Show你传的参数值,最后一句是ShowMessage(SQL.CommaText);显示出SQL的内容。我意思是显示的sql代码不是赋了参数的,而只是select * from zd_qyzg where gh=:gh  
      

  7.   

    什么数据库?如果是SQLServer之类的,可以考虑用数据库自带的工具:SQL 事件探查器
      

  8.   

    自己做一个From,内含TMemo,TMemo显示SQL。这样不很好码?
      

  9.   


    只showmessage(s)了下面的还是show不出完整的s是Show你传的参数值,最后一句是ShowMessage(SQL.CommaText);显示出SQL的内容。我意思是显示的sql代码不是赋了参数的,而只是select * from zd_qyzg where gh=:gh  我知道你的用意,只是好像没法做到。只能单独的显示参数值和SQL内容。