gpt4 book ai didi

mysql - 从 ado 对象输出 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 05:38:37 27 4
gpt4 key购买 nike

我的任务是改变 delphi 程序在这里的工作。该应用程序过去常常连接一个 mysql 服务器,并且很简单地运行查询。现在服务器已更改为不接受外部连接的服务器,我们决定将应用程序转换为连接到 Web 服务并通过那里发送 mysql 更新查询。

除了一件事,我的一切都正常。因为我不想改变太多东西(过去做了很多 c++builder 但那是 10 年前了)我决定将 ado 对象留在原地并尝试让它输出它生成的 mysql 所以我可以将它发送到网络服务(希望我说得通)。我遇到的问题是我发现的唯一问题是

ShowMessage (DataModuleDB.adoqClients.SQL.Text);

但这会在 ado 更改之前输出 mysql:

insert into table clients (id, name) values (:id, :name)

所以我的问题是如何(如果可能的话)在不执行它的情况下显示“真正的”mysql 查询。

显然,如果我不能那样做,我将更改所有内容并自己构建查询。

提前致谢。

最佳答案

实际的参数替换发生在 VCL 之外,最晚发生在 SQL Server 本身(允许重用查询计划)。
如果您仍然需要替换的 SQL,可以使用 ADOQuery 的 Command.CommandObject.CommandText 并替换“?”用自己的参数值。
AFAIK,ADO 只关心正确的顺序和类型...

类似于:

type
THackADOQuery = class(TADOQuery);

function DecodeSQL(AADOQuery: TADOQuery): string;
var
curParam: TCollectionItem;
begin
Result := THackADOQuery(AADOQuery).Command.CommandObject.CommandText;
for curParam in AADOQuery.Parameters do
begin
case TParameter(curParam).DataType of
ftString, ftWideString: Result := StringReplace(Result, '?', QuotedStr(TParameter(curParam).Value), []);
else
Result := StringReplace(Result, '?', TParameter(curParam).Value, []);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(DecodeSQL(ADOQuery1));
ADOQuery1.ExecSQL;
end;

关于mysql - 从 ado 对象输出 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com