如果更改位于“备注”类型的字段中,则保存已更改的行时出错

时间:2009-10-26 16:02:00

标签: sql-server ms-access odbc-sql-server-driver

我们在sql-server上有一个带有链接(odbc)表的Access-db。有时,特定行的一列存在罕见问题:类型备注字段中的更改不可能更多。 此特定行的其他列中的更改将保存为正常。 错误消息类似于:另一个应用程序已更改行,因此更新已被取消。

可能是什么原因,可以采取哪些措施来防止这种行为?

和平   冰

更新

mdb肯定没有损坏。里面只有odbc-connections,我们在只读模式下使用它。问题必须在jet-engine和odbc-driver各自的sql-server之间,这就是我的想法。

和平

1 个答案:

答案 0 :(得分:1)

如果您的数据存储在Jet / ACE后端,我会说您可能有一个损坏的备忘录指针。由于您的数据在SQL Server中并通过ODBC访问,因此无法解决问题。但是,由于其他人可能会遇到Jet / ACE后端遇到问题的讨论,下面的内容可能会有所帮助:

在Jet / ACE表中,备忘录数据不与其他字段一起存储。相反,数据存储在其他地方的单独数据页中,并且所有内联存储的数据都是指向第一个外部数据页的指针。该指针易受损坏,并且是数据丢失的常见原因。

Tony Toews的一些链接(最好的来源):

General Reference Source on Jet/ACE Corruption

Corruption Symptoms

在第二个中,搜索3197,这可能是您遇到的问题的错误编号。那里有一个链接,解释了如何对其进行故障排除。

修复后,您应该考虑重构数据表,以最大限度地降低备忘录字段损坏的风险。

  1. 我知道您没有使用Access,但对于Access表单,一种解决方案是避免绑定备注字段,而是在未绑定的文本框中编辑它们。在Access窗体的OnCurrent事件中,您将备忘录数据从表单的字段集合复制到它的未绑定文本框中,并在文本框的AfterUpdate事件中将其保存回表单的基础记录集。

  2. 对于所有应用程序,Access与否,将备忘录放在单独的表中会将备注字段指针与其余数据隔离开来。如果你有一个备忘录,它可以是一个1:1的表,如果你有多个备忘录,你将有一个1:N,备忘录表必须有一个字段来表示备忘录类型。使用该结构,不必删除主记录并重新创建以修复损坏的指针 - 您只需要删除备忘录表中损坏的记录。