MS Access ADP 断开连接的记录集恢复

Posted

技术标签:

【中文标题】MS Access ADP 断开连接的记录集恢复【英文标题】:MS Access ADP Disconnected Recordset Reverts 【发布时间】:2010-02-08 03:00:06 【问题描述】:

我有一个 Microsoft Access 2003 ADP,它使用一个绑定的“主”表单和几个绑定的连续样式子表单。它们都通过帮助类使用断开连接的记录集。

一些用户注意到了同样的奇怪行为:他们在连续子表单中添加/编辑记录,他们离开记录(将编辑提交到 Recordset),他们锁定计算机(Ctrl+Alt+Del),他们解锁计算机,他们回到表单,大约 5 秒后它闪烁并恢复到原始未编辑状态。

按照上述步骤,我已经能够重现这一点,此外,在对我的表单进行更改、绑定到断开连接的 Recordset 之后,我转到 SQL Server 并更改了一个值。锁定/解锁计算机例程后,表单闪烁并刷新,出现我刚刚在 SQL Server 中输入的 NEW 值。

好像大约 5 秒后,我断开连接的 Recordset 正在重新连接(它自己)并重新查询 Recordset。

我意识到我在这里没有提供很多信息,但是有人遇到过断开连接的 Recordset 重新连接和重新查询的问题吗?或者至少知道我可以从哪里开始调试?

如果有人想在他们的环境中重新创建数据库,我有 ADP 和 SQL 脚本来创建数据库。

以下是我创建断开连接的记录集的方式:

Dim cnn                 As ADODB.Connection
Dim stmTest             As ADODB.Stream

Set cnn = New ADODB.Connection
cnn.Open Application.CurrentProject.AccessConnection.ConnectionString

' Create recordset and disconnect it.
Set mrsTest = New ADODB.Recordset
mrsTest.CursorLocation = adUseClient
mrsTest.Open "SELECT * FROM [tblChild] WHERE ParentID = 1" _
    , cnn _
    , adOpenStatic, adLockBatchOptimistic
Set mrsTest.ActiveConnection = Nothing

cnn.Close
Set cnn = Nothing

' Copy recordset to stream in memory.
Set stmTest = New ADODB.Stream
stmTest.Open
mrsTest.Save stmTest, adPersistADTG

' Bind form to disconnected recordset.
Set Me.Recordset = mrsTest

' Open a copy of the recordset from the stream.
Set mrsTest = New ADODB.Recordset
stmTest.Position = 0
mrsTest.Open stmTest

【问题讨论】:

【参考方案1】:

我想要类似事务的处理(保存和取消按钮) 在我的多用户系统中,表被锁定。对于连续 Access to work 中的表单,它们必须绑定到 Recordset。

您可以使用绑定到临时表的表单/子表单来实现此效果。

http://www.access-programmers.co.uk/forums/showthread.php?t=206862

史蒂夫

【讨论】:

【参考方案2】:

可能有点离题,但这是有趣的代码。我从来没有想过使用这样的数据集。您使用这些“断开连接的数据集”有什么特别的原因吗?

【讨论】:

我希望在我的多用户系统中,在没有锁定表的情况下进行事务处理(保存和取消按钮)。要使 Access 中的连续表单正常工作,它们必须绑定到 Recordset。我发现了许多断开连接的记录集的示例;上面的代码来自这里:groups.google.com/group/comp.databases.ms-access/browse_frm/…

以上是关于MS Access ADP 断开连接的记录集恢复的主要内容,如果未能解决你的问题,请参考以下文章

如何自动断开空闲用户与 MS Access DB 的连接?

如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?

使用 VBA 断开用户与第三方应用程序使用 MS Access 的连接

为啥要克隆 MS-Access 记录集?

无法更新加入的记录集 - MS Access

Ms Access 比较两个记录集