gpt4 book ai didi

Delphi TAdoQuery - 多次插入?

转载 作者:行者123 更新时间:2023-12-03 07:14:03 26 4
gpt4 key购买 nike

Delphi TAdoQuery 是否可以一次性执行多个插入,或者是否必须单独执行每个语句?我想做的是这样的:

AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('INSERT INTO user VALUES (1, "User 1");');
AdoQuery.SQL.Add('INSERT INTO user VALUES (2, "User 2");');
AdoQuery.SQL.Add('INSERT INTO user VALUES (3, "User 3");');
AdoQuery.ExecSQL;
AdoQuery.Close;

这可能吗?执行此操作时,我从 MySQL 收到错误。我还尝试添加 BEGIN;和结束;围绕查询,但这也不起作用。

编辑:我想这样做,因为当我在 for 循环中执行插入时,> 10 个查询似乎需要很长时间。我假设像上面那样添加它们会加快速度。有谁知道插入之间是否需要 AdoQuery.Close 调用?

最佳答案

尝试这样的事情(使用 AdoCommand):

sSql := 'INSERT INTO User (FieldName1, FieldName2) values (:Nr, :Strng)';
AdoCmd.Parameters.Clear();
AdoCmd.CommandText := sSql;
AdoCmd.CommandType := cmdText;
AdoCmd.Parameters.ParseSQL( sSql, True );
AdoCmd.Parameters.ParamByName('Nr').DataType := ftInteger
AdoCmd.Parameters.ParamByName('Strng').DataType := ftString;

for i := 1 to 10 do
begin
AdoCmd.Parameters.ParamByName('Nr').Value := i;
AdoCmd.Parameters.ParamByName('Strng').Value := sUserName(i);
AdoCmd.Execute;
end;

您可以使用 .Params(0).Params(1) 来加快速度,因为 ParamByName 会占用一些时间。

但这里的技巧是 ParseSql 语句。它使您的代码保持清晰,但仍然只解析一次 sql 字符串。

如果需要,您可以使用事务...通过使用 AdoCmd.Connection.BeginTransAdoCmd.Connection.CommitTrans/RollbackTrans

关于Delphi TAdoQuery - 多次插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947718/

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