【发布时间】:2013-02-18 19:31:11
【问题描述】:
在我们的多用户访问环境中,有时需要对一组记录执行不同的操作。例如,在 Orders 表中,用户可能想要删除一组订单,或者打印出一组记录等。为此,在 Orders 表中,我创建了一个名为 aSelect 的布尔字段(“a " 是为了避免 "Select" SQL 保留关键字)。在订单表单上,用户可以通过单击 aSelect 字段的复选框,然后单击“打印”、“删除”或任何其他操作来检查他们想要处理的订单。然后表单后面的代码说要处理所有订单的操作 WHERE ASELECT=TRUE
问题是,(虽然它还没有发生),aSelect 复选框绑定到表中的基础字段,并且两个用户可以同时更改 aSelect。因此,假设用户 A 选择要删除的两条记录,但在他点击删除按钮之前,另一个尝试打印 100 条记录的用户选择了 100 条记录。结果将是所有 100 条记录都将被删除,而不是预期的结果。
任何解决方案或替代方案?这种情况在整个数据库中多次出现。 Orders 表只是一个例子。
谢谢,
【问题讨论】:
-
用户 id 而不是/以及勾号怎么样?然后您可以通知用户 A 用户 B 正在尝试删除他们的打印集。顺便说一句,我几乎从不允许删除,只删除标志。或者,将前端的标志信息保存在一个小表格中。
-
@Remou,我希望有一个更精简的解决方案。一个小的前端表是一种痛苦,尤其是对于多个场景。谢谢,
-
那么你希望得到什么?
-
也许 Access 是一个错误的工具,但我知道在 ADO.NET 中它是一个断开连接的模型。或许在 Access 中也有类似的东西,其中每个用户都可以查看他自己的“版本”后端表,而无需更新对“真实”后端表的更改,也不必创建单独的临时表。我希望这是有道理的。
-
当然,您可以断开数据连接,但如果没有对真实数据执行删除,您如何看待这些删除工作?您希望用户多久知道有更多(或更少)可用的真实数据?
标签: sql ms-access concurrency