我正在维护一个链接到 MSSQL2000 数据库的多用户 Access 2000 DB,这不是我编写的。

数据库设计很差,所以你必须忍受我。

在“客户”表单上,有一个“Customer_ID”字段,默认情况下需要获取下一个可用的客户 ID,但用户可以选择使用现有客户 ID 覆盖此选择。

现在,Customer_ID 字段不是 Customer 表的 PK。这也不是独一无二的。

如果客户两次调用提交作业,该表将获得两条记录,每条记录都有相同的客户信息和相同的客户 ID。

如果用户创建新票证,Access 会快速查找下一个可用的客户 ID 并填写。但它不会保存记录。显然是一个问题 - 两个编辑用户必须跟踪彼此的工作,这样他们就不会欺骗客户 ID。

所以我想修改“新记录”按钮,以便它在创建新记录后立即保存票据。

问题是,当我测试更改时,我得到“此记录自您开始编辑以来已被其他用户更改”。

数据库上绝对没有其他用户。“其他用户”大概是我的强制保存。

有任何想法吗?

有帮助吗?

解决方案

看看在SQL Server 2000中的链接表是否有包含位数据类型的字段?如果你有一个位字段的不具有默认值使用会给你一个链接表场景此错误消息。

这可能不是什么错在你的情况,但我已经遇到了同样在2007年Access数据库,并没有默认值跟踪的问题位字段。

其他提示

我已经看到这种行为之前和这个固定它为我:

尝试一个时间戳字段添加到表(刚加入这一领域,并更新链接表。你并不需要填写此字段的任何类型的数据)。

您收到的错误通常发生在以下情况:

  1. 您正在编辑表单中的记录,并且表单是脏的(即,编辑未保存),

  1. 您运行使用 DAO 或 ADO 的代码来运行 SQL 来更新同一记录。

对于 Jet 来说,这是两个“用户”,因为这是两个不同的编辑操作。基础表已通过 SQL 更新进行更新,而表单缓冲区中的数据现已过时。

通常的解决方案是在运行 SQL 更新之前强制保存:

  If Me.Dirty Then
     Me.Dirty = False
  End If
  [run your SQL update here]

但是,如果您使用表单来编辑记录,则应该在表单中执行所有更新,而不是诉诸 SQL 来执行更新。

您描述的生成自己的序列的情况应该以这种方式完成:

  1. 用户点击新记录按钮。

  2. 计算下一个序列值并将其存储在变量中。

  3. 通过 SQL INSERT 插入具有该序列值的新记录。

4a.如果您的表单绑定到表中的所有记录,请重新查询数据编辑表单(假设 NEW RECORD 按钮位于用户编辑数据的表单上),并使用书签导航移动到具有以下序列值的新记录:您在步骤 2 中存储在变量中。

4b.如果您的表格是 不是 绑定到所有记录(如果它是一个设计良好的数据库,则不应如此),您只需更改表单的记录源以仅加载新记录。

另一种选择是避免 SQL INSERT 和重新查询(或重置记录源),只需在现有表单中添加新记录,将序列字段设置为新值并立即保存记录。

关键点是,要在多用户环境中工作,必须在为记录分配序列值后立即保存记录 - 您不能让记录悬在那里未保存,因为这意味着相同的序列值可供其他用户使用,这只会带来灾难。

这是一个老问题,我已经从谷歌遇到,所以我会提出我的答案。

在ODBC驱动程序,一定要打开行版本。如果该表已在Access中,你就必须把它和重新链接拖放到源表。

您应该可以告诉你,如果启用了行版本,因为Access应该添加一个列到你的表称为xmin

我会跟踪用户是否已经覆盖了新的customer_id与自己的价值。如果他们没有,那么你的应用程序应该能够便又节约型,只是自我增量前检查是否有重复的,而用户并不介意采取默认。甚至一些指标,你必须自动选择不同的值的用户。

我也有同样的问题。我试图使用Spring MVC在一个表中更新和冬眠。在我的情况在表中的版本列包含的值大于1(即3)然而,在我的更新查询的更新信息有版本值1

我们的问题是,该访问前端试图保存一个int(是/否)成MSSQL位(0/1)字段。更改MSSQL数据库为int领域工作就像一个魅力。

我刚刚翻过产生这种错误的另一种情况。在MySQL表我有这最初曾默认值“0000-00-00”两个日期列。后来又改为默认为空,但许多行保留值“0000-00-00”。我不得不手动重置值设为NULL停止错误。

我花了很多时间来弄清楚什么是trigering错误,HTH别人。

,也可以如果在SQL Server表包含一个DATETIME2柱引发此错误(在我的情况与SYSDATETIME的默认值())。改变数据类型回日期时间默认CURRENT_TIMESTAMP停止错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top