如何阻止Access锁定数据库

时间:2012-11-08 08:08:22

标签: sql-server ms-access

我有一个具有“连续表单”子表单的Microsoft Access应用程序。在我的应用程序中访问该表单时,我发现SQL Server有很多锁(超过1000)。 [通过从master数据库视图sys.dm_trans_locks中选择1000条记录找到。]

表单的数据源是名为qryProspect summary的Pass Through Query。它反过来只有SQL“EXEC qryProspectSummary”来调用一个返回所需数据的存储过程。

存储过程“qryProspectSummary”只是一个复杂的select语句 - 在一些表上有一些嵌套的选择和联合以及连接。从SQL Server Management Studio运行它会生成正确的结果,并且不会锁定数据库的任何部分。

我已将数据源记录集类型设置为“snapshot”。

如何阻止Access取消所有这些锁定 - 它有效地破坏了任何多用户工作,因为它只是一个数据快照。

2 个答案:

答案 0 :(得分:1)

您可能希望使用链接视图来返回此快照的结果。我发现在某些情况下,Access在处理来自SQL Server的大型数据集时会更好地使用视图。有什么方法可以使用 qryProspectSummary 作为视图吗?这不能保证有效,但我会尝试一种选择。

答案 1 :(得分:0)

我昨天找到了问题的答案,但由于某种原因无法访问此网站。我没有创建具有对存储过程的访问权限的直通查询,而是将以下代码添加到表单的ON LOAD事件中。

Dim cmd As ADODB.Command, rst As ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = getStrConn
cmd.CommandText = "qryProspectSummary"
cmd.CommandType = adCmdStoredProc
Set rst = cmd.Execute()
Set Me.Form.Recordset = rst
Set cmd = Nothing

getStrConn是一个重试数据库连接字符串的函数(我有一个管理员功能,可以在启动时更改数据库,因此我不能只对它进行硬编码)。 这解决了这个问题,我发现当我打开表单时,没有任何异常现在被锁定。

它有一个缺点,我使用的是Form.Requery,但是不会重新运行查询 - 我必须重新执行上面的代码。但它支付的价格很低

相关问题