gpt4 book ai didi

sql-server - ADOQuery,触发和重新查询错误

转载 作者:行者123 更新时间:2023-12-03 19:45:33 29 4
gpt4 key购买 nike

我有一个ADOQuery,它将记录插入到SQL Server 2005表中,该记录已触发将数据插入到另一个表中。我使用以下代码刷新查询并避免使用Row cannot be located for updating(每个表上都有PK,设置了UpdateCriteria属性,将Cursors设置为Dynamic,但有时还是会出现错误。但是现在这不是问题。)

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时,我还没有看到这样的错误,因此我愿意尝试 SDACDAO。 SDAC或DAO是否可以解决问题,或者在不更改ADOQuery的情况下有任何解决方案?

最佳答案

我不熟悉ADOQuery,但是正如您所说的那样,您正在获取受触发器影响的表的ID,同时希望获取原始表的ID,这也许是使用与SQL“ scope_identity”等效的函数的问题。请参见Best way to get identity of inserted row?

编辑

似乎该问题与以下事实有关:ADO查询本身正在使用@@ Identity获取已添加记录的ID,而它实际上应该使用scope_identity(),当您触发将数据插入到另一个表中时,这会产生影响包含您所使用的身份列-请参阅上面的链接以获取scope_identity和@@ identity的详细信息。 This post包含问题的一些详细信息

关于sql-server - ADOQuery,触发和重新查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031690/

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