行在检索和更新之间发生更改。 Powerbuilder错误

问题描述 投票:0回答:1

我有一个名为 dw_1 的数据窗口,其中有两个表

Table1 Left Join Table2
。我正在使用一些检索参数检索 dw_1(例如检索 100 行),之后我将修改 dw_1 Table2 列中的大约 10 行。我打电话给
dw_1.Update()
,我收到以下错误。

数据库:SQL Server

行在检索和更新之间发生了变化。 没有对数据库进行任何更改。 从 Table2 中删除,其中 Col1 为 NULL,Col2 为 NULL,Col3 为 Null;

我的更新属性是

Table to Update : Table2
Where Clause for Update/Delete : Key Columns
Key Modification : Use Delete Then Insert
Updatable Columns : All Columns of Table2
Unique Key Columns : Primary Key Columns of Table2
Identity Column : (None)
sql-server powerbuilder datawindow
1个回答
0
投票

当数据从数据库返回时,它存储在原始数据中! DataWindow 缓冲区,部分作用是在调用 DW 的 Update() 时从中提取值以构建 WHERE 子句。当其中一个 DML 调用返回零行受到影响时,DW 会引发“行已更改”错误(称为逻辑记录锁定,以处理多用户争用)。

当“行已更改”错误出现但事实并非如此时,通常是因为有人以编程方式更改了原始数据中的数据!缓冲区而不完全理解该数据是如何使用的。结果是 DW 使用错误的值构建 WHERE 子句。

另一种方法是相信表 2 的 3 个主键列是从数据库中作为空值检索的,这是一个完全不同的危险信号。如果您要发送表 2 中没有数据的行的更新……那么,这似乎是错误的。如果您尝试不更新这些 DW 行,请使用 DiscardRow(),这将使 DW“忘记”该行,而不是使用 DeleteRow(),这将触发 DELETE 语句。

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.