【发布时间】:2015-07-10 18:03:40
【问题描述】:
我正在尝试使用 Delphi XE8 中的参数化查询在同一循环中更新两个不同的 SQL 表。我还想把整个事情包装在一个事务中,这样如果循环中的任何事情都失败了,两个表都不会更新。
我真的不知道我在做什么,希望能得到一些帮助。
下面的代码是我想要达到的目标的简化版本,也是我对如何实现它的最佳猜测。但我根本不确定,尤其是使用连接到“SQL 连接”组件的两个数据集。
SQL_transaction.TransactionID :=1;
SQL_transaction.IsolationLevel:=xilREADCOMMITTED;
SQL_connection.BeginTransaction;
Try
{ Create connections }
SQL_dataset1 :=TSQLDataSet.Create(nil);
SQL_dataset1.SQLConnection:=SQL_connection;
SQL_dataset2 :=TSQLDataSet.Create(nil);
SQL_dataset2.SQLConnection:=SQL_connection;
{ Create queries }
SQL_dataset1.CommandType:=ctQuery;
SQL_dataset1.CommandText:={ some parameterized query updating table A }
SQL_dataset2.CommandType:=ctQuery;
SQL_dataset2.CommandText:={ some parameterized query updating table B }
{ Populate parameters and execute }
For I:=0 to whatever do
begin
SQL_dataset1.ParamByName('Table A Field 1').AsString:='Value';
SQL_dataset1.ExecSQL;
SQL_dataset2.ParamByName('Table B Field 1').AsString:='Value';
SQL_dataset2.ExecSQL;
end;
SQL_connection.Commit(SQL_transaction);
except
SQL_connection.Rollback(SQL_transaction);
end;
我用的是Delphi XE8,数据库可以是SQL server也可以是SQLite。
【问题讨论】:
-
您有问题吗?我不是 Delphi 方面的专家,但这对我来说还不错。
-
代码看起来确实不错,一个小挑剔,你应该重新提出异常......
标签: sql-server delphi sqlite transactions parameterized