0

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

可能是什么原因,可以做些什么来防止这种行为?

和平冰

更新:

mdb 绝对没有损坏。里面只有odbc-connections,我们以只读模式使用。问题必须在喷气发动机和 odbc-driver 和 sql-server 之间,这就是我的想法。

和平

4

1 回答 1

1

如果您的数据存储在 Jet/ACE 后端,我会说您的备忘录指针可能已损坏。由于您的数据位于 SQL Server 中并通过 ODBC 访问,因此这不是答案。但由于其他遇到 Jet/ACE 后端问题的人可能会参加此讨论,因此以下内容可能会有所帮助:

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

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

Jet/ACE 损坏的一般参考来源

腐败症状

在第二个中,搜索 3197,这可能是您遇到的问题的错误号。那里有一个链接,解释了如何解决它。

在您修复它之后,您应该考虑重新构建您的数据表,以尽量减少备注字段损坏的风险。

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

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

于 2009-10-30T23:57:08.700 回答