【问题标题】:VBA to properly access multi user databaseVBA正确访问多用户数据库
【发布时间】:2018-09-07 15:55:27
【问题描述】:

我正在处理一个 Excel 加载项项目,该项目有多个用户访问服务器上的数据库。目前,只要一次只有一个用户访问数据库,所有代码都可以正常工作并且一切都可以正确处理。我正在使用 DAO 访问数据库并传递一个 SQL 字符串以使用以下代码行检索记录

Set db = OpenDatabase(g400DBPath, , True)
Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot)

这会产生一个问题,即如果多人同时尝试访问数据库,则只有第一个人能够访问它。我尝试将记录集代码行更改为以下

Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot, , dbOptimistic)

但这给了我以下错误:运行时错误'3001:无效参数

如何设置对记录集的访问权限,以便多个用户可以运行报告?用户根本没有更新数据库中的任何信息,一切都是只读的。

【问题讨论】:

  • 看看 ADODB 能为你做什么。

标签: excel ms-access vba


【解决方案1】:

您的问题是:快照类型的记录集始终是只读的。指定任何编辑锁定选项都会引发运行时错误,因为快照类型的记录集不进行锁定。

我无法重现该行为,但您可以尝试以下操作:

Set db = OpenDatabase(g400DBPath, False, False) 'Read-only can lead to exclusive locks since more specific locks are stored in the DB
Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)

或者,您可以尝试使用 ADO 和断开连接的记录集。据我所知,DAO 不提供该功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多