【发布时间】:2009-06-23 10:11:21
【问题描述】:
我有一个 ADOQuery,它向 SQL Server 2005 表插入一条记录,该表具有向另一个表插入数据的触发器。我使用以下代码刷新查询并避免Row cannot be located for updating(每个表上都有PK,设置了UpdateCriteria属性,游标设置为动态,但有时我仍然会收到错误。但现在不是问题了)。
procedure Requery(T: TCustomADODataSet; IDField: string);
var
i: integer;
begin
if T.RecordCount > 0 then
i := T.FieldByName(IDField).AsInteger;
T.Requery();
if T.RecordCount > 0 then
T.Locate(IDField, i, []);
end;
在重新查询之前,我可以获得 ID 字段的值。但是,重新查询后,ID 字段返回触发器插入的其他表记录的 ID 字段的值。两个表都有同名的 ID 字段。我还添加了SET NOCOUNT ON .... OFF 来触发以避免Too Many Rows Affected 错误,但是我认为这不会影响我的问题。在使用 Delphi 6 - 7 和 SQL Server 2000 时,我还没有看到类似的错误,因此我愿意尝试SDAC 或DAO。 SDAC 或 DAO 会解决问题吗?或者是否有任何解决方案而不更改 ADOQuery?
【问题讨论】:
-
用什么来获取ID字段的值?
-
ADOQueryName.FieldByName('ID').AsInteger;
标签: sql-server delphi ado triggers