Delphi调试模式中抓出来的SQL语句中变量值是双引号,不能直接执行,要替换为单引号包裹才行。
DELPHI中双引号用''''表示,单引号用''表示。但是
//下面这种写法是错误的。执行结果是全部被替换成空了。
Memo2.Text:=StringReplace(Trim(ssql), '''', '', [rfReplaceAll]);
//正确写法如下:
Memo2.Text:=StringReplace(Trim(ssql), #39#39, #39, [rfReplaceAll]);
//以下简易代码可以直接将调试模试ctrl+F7窗口的变量值转成正常可执行的SQL语句
procedure TForm1.Memo1Change(Sender: TObject);
var
ssql:string;
begin
ssql:=Memo1.Text;
Delete(ssql, 1, 1);
Delete(ssql, Length(ssql), 1);
Memo2.Text:=StringReplace(Trim(ssql), #39#39, #39, [rfReplaceAll]);
end;
另:经测试,DelphiXE2中调试模式中Local Variables 窗口中变量对应值最大AnsiString类型长度为3840字节,选中变量按CTRL+F7窗口中的最大长度限制了4579字节,超过这个长度会被截断丢弃。如果超长SQL语句用这种跟踪调试方法抓取的SQL语句会有丢失,建议用另存为文件的方法获取,showmessage(好像没有丢失,但是通过剪贴板复制showmessage窗口的内容会有8192字节的限制)。