Ms access 如何在Access中实现事务?
我无法在access窗体上实现事务/回滚功能 以下是我所做工作的简要概述: 在表单的加载处理程序中,我启动事务Ms access 如何在Access中实现事务?,ms-access,transactions,Ms Access,Transactions,我无法在access窗体上实现事务/回滚功能 以下是我所做工作的简要概述: 在表单的加载处理程序中,我启动事务 dbEngine.BeginTrans gInTransaction = true 然后,有一个“取消”按钮,其单击处理程序如下 dbEngine.Rollback gInTransaction = false doCmd.close acForm, "frmName" 最后,表单的卸载处理程序具有: if gInTransaction then dbEngine.Comm
dbEngine.BeginTrans
gInTransaction = true
然后,有一个“取消”按钮,其单击处理程序如下
dbEngine.Rollback
gInTransaction = false
doCmd.close acForm, "frmName"
最后,表单的卸载处理程序具有:
if gInTransaction then
dbEngine.CommitTrans
gInTransaction = false ' just in case
end if
现在,关于回滚,似乎对表单没有影响。按“取消”按钮似乎不会回滚任何内容
我还尝试用dbEngine.workspace(0)替换dbEngine,但也没有效果
所以,问题是:如何在Access中实现事务
谢谢你给我指引了正确的方向,
Rene我同意Shahkalpesh的意见,表格的更新不属于交易的一部分。您可以通过使用未绑定表单而不是使用绑定表单来让表单执行这些操作,这样您就可以控制IO何时完成
您可以通过几种方法来实现这一点,但我更喜欢的方法是将详细信息加载到表单onload中,然后使用一个save按钮触发一个sub,将这些详细信息保存回DB。我通常还会设置一个公共变量调用bDirty,并在控件未注明日期时将其更改为true,这样,如果用户在保存更改之前尝试关闭表单,您可以警告用户,我认为您无法在表单上实现事务,在表单上对记录集进行更新(使用beforeUpdate和afterUpdate事件),当事务链接到执行发送到数据库的INSERT、UPDATE或DELETE命令时 编辑:如果您的想法是能够同时管理对连续表单所做的所有更改,则有两种不同的解决方案:
我在一个多星期前读过,但它不是为处理以绑定形式编辑的数据而设计的。基本上,对于绑定表单,您没有通过其他接口进行的相同控制。这既是一个特性,也是一个缺点,这取决于您试图做什么。研究这些事务,我发现这个链接很有希望:
然而,它似乎还存在一些其他问题。在表单加载和关闭之间执行哪些DML语句(UPDATE/INSERT/DELETE)?更改是如何写入数据库的?我没有显式地编写一些dml语句,但access(或表单)通过填写(continouos)表单并附加记录来为我完成。因此,它将是上面提到的三个dml语句:update、insert和delete。在这种情况下,它不会在您使用
dbEngine.beginters
启动的事务下运行。使用dbEngine.Execute
等执行的语句将在事务下运行,前提是在此之前调用了beginters
。我认为您的解决方案描述了一种“单记录”表单,但不适用于continous表单。但在我的例子中,我必须解一个continouos形式,在你最初的问题中,我没有看到关于它是一个连续形式的部分。如果您将连续表单作为子表单,并将要执行的语句“发布”回主表单,则仍然可以。然后,您可以在需要时执行这些语句。这将是非常黑客,但会工作。除了连续形式,还有其他选择吗?