在 MSAccess 中使用 VBA (ADODB) 将数据从远程 DB 附加到本地表,而不锁定远程 DB 中的记录

Posted

技术标签:

【中文标题】在 MSAccess 中使用 VBA (ADODB) 将数据从远程 DB 附加到本地表,而不锁定远程 DB 中的记录【英文标题】:Use VBA ( ADODB) in MSAccess to append data from remote DB to a local table with out locking records in the remote DB 【发布时间】:2011-12-27 17:42:01 【问题描述】:

我想要做的是将现有的 MS Access 应用程序分离为前端(将在用户机器上本地运行)和后端(将托管在网络文件服务器上)并允许用户选择在“只读”和“写入”模式之间。这个想法是一次只有一个用户可以使用“写入”模式,从而防止将同一块库存分配给多个客户。我的问题是应用程序当前通过要求用户打开一个 .bat 文件来处理并发性,该文件只允许他们在 .ldb 文件不存在时进入应用程序(目前没有只读模式),所以我需要防止用户以“只读”模式访问生产数据,无需创建 .ldb 文件并不必要地阻止其他用户。

实现这一点的最大挑战是用户必须对本地安装的 MS Access (.mdb) 文件中的临时表具有写入权限。我尝试使用链接表来实现这一点,但我不确定如何控制何时使用链接表(创建 .ldb 文件)锁定记录。

【问题讨论】:

【参考方案1】:

您可以将共享设置更改回独占模式。然后一次只有一个人可以访问该文件。查看此链接以及您拥有的其他共享选项。

http://office.microsoft.com/en-us/access-help/set-options-for-a-shared-access-database-mdb-HP005188297.aspx

旁注:哎呀。在共享网络环境中使用 Access 并不好玩。我希望这个文件中没有任何重要/时间敏感/安全的内容。在这种情况下,我经常看到 .ldb 文件没有被删除并阻止其他用户。我相信像您所做的那样将 Access 文件拆分为前端和后端是第一步。然后使用链接到 SQL Server 数据库的表可以帮助解决这些问题。但是,如果您要达到这种水平,您可能需要考虑放弃 Access 并获得 COTS 产品或创建新应用程序。

【讨论】:

【参考方案2】:

根据您使用的 Access 版本,UI 开发具有很大的灵活性。换句话说,这听起来更像是与“数据库”问题相对的“接口”问题。鉴于每个人都可以写入表,您应该能够在一定程度上实时检查(性能可能是较大数据集的问题),是否已将特定内容添加到库存中。

他们我处理这个问题是有两个表,一个传入和传出日志,并设置一个查询,对产品数量的库存列表进行数学计算。就像总账一样,选择设定的时间来“关闭日志”(每月、每季度),这样查询就不会考虑两年前发生的事情。

如果您需要有关 Access 相关内容的更多帮助,Access Monster 是一个很好的论坛站点,它只处理访问权限。

【讨论】:

【参考方案3】:

我的问题是应用程序当前通过要求用户打开一个 .bat 文件来处理并发,该文件只允许他们在 .ldb 文件不存在时进入应用程序(目前没有只读模式),所以我需要防止以“只读”模式访问生产数据的用户创建 .ldb 文件并不必要地阻止其他用户。

--> 如果每个用户在自己的机器上都有自己的前端副本,那么您必须检查后端的 .ldb 文件。

我想让每个人都可以访问后端并通过后端的“由用户 X 锁定”字段以编程方式管理实际写入会更容易:

你说:

防止将同一块库存分配给多个客户

    如果这是将除一个用户之外的所有用户置于只读模式的唯一原因,您可以在清单表中放置一个“由用户 X 锁定”字段。如果有人开始修改(甚至打开)一个库存,用他的用户名更新记录,并在他完成后再次删除用户名。 如果另一个用户也尝试打开相同的库存,则第一个用户的名称将已经在“用户 X 锁定”字段中,因此您可以将第二个用户设置为只读模式。

    如果库存件不是唯一的问题,并且所有其他用户确实不允许在其他人已经在编辑时更改任何内容,您可以创建一个新表只有一列一行,并将其用作“由用户 X 锁定”字段。只要里面有用户名,就可以让其他人进入只读模式。

无论您如何操作,您都必须提供某种管理菜单,因此如果某人的前端在编辑时崩溃,其他人需要能够解锁该用户的锁定数据(=从“被用户 X 锁定”字段)。

【讨论】:

以上是关于在 MSAccess 中使用 VBA (ADODB) 将数据从远程 DB 附加到本地表,而不锁定远程 DB 中的记录的主要内容,如果未能解决你的问题,请参考以下文章

VBA ADODB 查询返回 -1

vba adodb参数查询失败

在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效

将 ADODB 循环转换为 DAO

VBA 将整个 ADODB.Recordset 插入表中

共享模块VBA之间的adodb连接