我有一个Microsoft Access 2003 ADP,它使用绑定的“主”表单和几个绑定的连续样式子表单。它们都通过辅助类使用断开连接的Recordset。
有几个用户注意到了同样的奇怪行为:他们在连续子窗体中添加/编辑记录,他们离开记录(将编辑提交到Recordset),他们锁定计算机(Ctrl + Alt + Del),他们解锁电脑,他们回到表格,大约5秒钟后,它闪烁并恢复到原来未经编辑的状态。
我已经能够按照上面的步骤重现这一点,而且,在我的表单中进行更改后,绑定到一个断开连接的Recordset,我去了SQL Server并更改了一个值。锁定/解锁计算机例程后,表单闪烁并刷新,我刚刚在SQL Server中输入的NEW值出现。
好像在大约5秒后,我的断开连接的Recordset重新连接(自己)并重新查询Recordset。
我意识到我在这里没有提供大量信息,但有没有人遇到过连接记录集重新连接和重新查询的问题?或者至少知道我可以在哪里开始调试?
如果有人想在他们的环境中重新创建数据库,我有ADP和SQL脚本来创建数据库。
以下是我创建断开连接的Recordset的方法:
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
答案 0 :(得分:1)
我想要处理(保存和取消按钮)之类的事务 在我的多用户系统中,表被锁定。为了连续 在访问工作中,它们必须绑定到Recordset。
您可以使用绑定到临时表的表单/子表单来实现此效果。
http://www.access-programmers.co.uk/forums/showthread.php?t=206862
史蒂夫
答案 1 :(得分:0)
可能有点偏离主题,但这是有趣的代码。我从未考虑过使用这样的数据集。是否有一个特殊原因可以使用这些“断开连接的数据集”?
答案 2 :(得分:0)
我过去曾经尝试过相同的代码并且拥有相同的经验。
以下是我为什么记录集重新连接到服务器的方式......
如果检查表单的recordsource(绑定记录集后),您将看到您的SQL语句作为值放置。由于它是ADP,因此您的表单始终绑定到服务器。因此,当表单刷新时,记录集也会刷新。
如果您找到解决方案,请发布!
谢谢。