ADOQUERY 的动态参数 获取SQL语句

奔雷手 2013-07-22 02:00:56

with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:='update table1 set sign=:Sign';
Parameters.ParamByName('Sign').Value:=Trim(Edit1.Text) ;
Memo1.Lines.Add(SQL.Text) ;
ExecSQL;
end;

现在抓取到的 SQL都是
update table1 set sign=:Sign


有没有方法抓取的SQL语句是有值的
update table1 set sign='1001'
...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔雷手 2013-07-26
  • 打赏
  • 举报
回复
没发获取,改用其他手段了.
固执的大叔 2013-07-23
  • 打赏
  • 举报
回复

with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Text:='update table1 set sign=''' + Trim(Edit1.Text) + '''';
    Memo1.Lines.Add(SQL.Text) ;
    ExecSQL;
  end;
直接这样不可以么?
奔雷手 2013-07-22
  • 打赏
  • 举报
回复
引用 4 楼 feiba7288 的回复:
还有其他事件啊,BeforeInsert,BeforeDelete...
经过测试 BEFORE系列函数 都不触发
feiba7288 2013-07-22
  • 打赏
  • 举报
回复
还有其他事件啊,BeforeInsert,BeforeDelete...
feiba7288 2013-07-22
  • 打赏
  • 举报
回复
引用 2 楼 lch0422 的回复:
[quote=引用 1 楼 feiba7288 的回复:] 写在ADOQuery1控件的BeforeOpen事件里面,下面只供你参考,更细致的地方需要你自己修改下。

procedure TfmMain.ADOQuery1BeforeOpen(DataSet: TDataSet);
var
  i: integer;
  s: string;
begin
  s := ADOQuery1.SQL.Text;
  for i := 0 to ADOQuery1.Parameters.Count - 1 do
  begin
    //if ADOQuery1.Parameters.Items[i].DataType = ftString then
    s := StringReplace(s, ':' + ADOQuery1.Parameters.Items[i].Name, '''' + ADOQuery1.Parameters.Items[i].Value + '''', [rfReplaceAll, rfIgnoreCase]);
  end;
  ShowMessage(s);
end;
是的,确实是一个方案,但这个是在查询的时候才会有的。 在
ExecSQL
的时候是属于哪类呢。不是INSERT/EDIT/DELETE/POS 。[/quote] 你先写在BeforeOpen里面试下,看会不会Show出来。
奔雷手 2013-07-22
  • 打赏
  • 举报
回复
引用 1 楼 feiba7288 的回复:
写在ADOQuery1控件的BeforeOpen事件里面,下面只供你参考,更细致的地方需要你自己修改下。

procedure TfmMain.ADOQuery1BeforeOpen(DataSet: TDataSet);
var
  i: integer;
  s: string;
begin
  s := ADOQuery1.SQL.Text;
  for i := 0 to ADOQuery1.Parameters.Count - 1 do
  begin
    //if ADOQuery1.Parameters.Items[i].DataType = ftString then
    s := StringReplace(s, ':' + ADOQuery1.Parameters.Items[i].Name, '''' + ADOQuery1.Parameters.Items[i].Value + '''', [rfReplaceAll, rfIgnoreCase]);
  end;
  ShowMessage(s);
end;
是的,确实是一个方案,但这个是在查询的时候才会有的。 在
ExecSQL
的时候是属于哪类呢。不是INSERT/EDIT/DELETE/POS 。
feiba7288 2013-07-22
  • 打赏
  • 举报
回复
写在ADOQuery1控件的BeforeOpen事件里面,下面只供你参考,更细致的地方需要你自己修改下。

procedure TfmMain.ADOQuery1BeforeOpen(DataSet: TDataSet);
var
  i: integer;
  s: string;
begin
  s := ADOQuery1.SQL.Text;
  for i := 0 to ADOQuery1.Parameters.Count - 1 do
  begin
    //if ADOQuery1.Parameters.Items[i].DataType = ftString then
    s := StringReplace(s, ':' + ADOQuery1.Parameters.Items[i].Name, '''' + ADOQuery1.Parameters.Items[i].Value + '''', [rfReplaceAll, rfIgnoreCase]);
  end;
  ShowMessage(s);
end;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧