任何人都可以确认是否可以链接到Microsoft Access .accdr文件中的表吗?
我有一个拆分的 MS-ACCESS 应用程序,其前端位于 .accdr 文件中,表位于服务器上的.accdb文件后端。 出于我在下面解释的原因,我需要前端连接到扩展名为 .accdr 的第二个后端文件(也在服务器上(中的表。
我没有发现任何文档明确指出 .accdr 文件不允许作为后端数据库,但是,链接表管理器似乎不允许这样做,并且 DoCmd.DatabaseTransfer 方法抛出错误。
我的解决方法是暂时将 .accdr 服务器文件重命名为.accdb,链接到其中的表以进行数据更改,然后将其重命名回 .accdr。 但是如果我不必这样做,我宁愿直接连接。
原因:为了确保每个客户端都能获得前端 .accdr 的最新更新副本,我创建了一个批处理脚本,该脚本首先在启动之前将前端从服务器复制到其本地计算机。 每次加载应用程序时,时间损失很短(前端约为 8 MB(,但批处理脚本确保客户端始终是最新的。(如果性能成为一个问题,我当然会在下载之前让批处理脚本验证 MD5 总和,但它还没有出现。
我没有很多客户端同时连接(只有大约 2 或 3 个并发连接(,但它们可以从校园内数千台计算机中的任何一台进行连接,所以我发现这是确保无论他们从哪里连接,他们都会获得前端的新副本的最简单方法。
不幸的是,我在前端本地制作了一些表,因为它们允许单个用户在会话期间本地设置参数。 当然,现在我有一个案例,单个用户需要更新这些本地表,以便所有其他用户都将获得相同的数据。(以前,我只是根据请求手动进行这些更改,但该用户非常合理地需要能够自己完成。
因此,本地前端 .accdr 文件需要连接到同一前端 .accdr 文件的服务器副本,才能在表中进行一些数据调整。 这就是原因。我知道这很奇怪。
谢谢达蒙
事实证明,可以使用 .accdr 作为后端。 我想我指定了错误的连接或其他东西。 我将以下代码片段与strConnect = path_to_mydb.accdr
一起使用:
Public Sub ConnectOutput(dbsTemp As Database, _
strTable As String, strConnect As String, _
strSourceTable As String)
Dim tdfLinked As TableDef
' Create a new TableDef, set its Connect and
' SourceTableName properties based on the passed
' arguments, and append it to the TableDefs collection.
Set tdfLinked = dbsTemp.CreateTableDef(strTable)
tdfLinked.Connect = strConnect
tdfLinked.SourceTableName = strSourceTable
dbsTemp.TableDefs.Append tdfLinked
End Sub
您可以轻松地将前端本地表添加到后端。只需将它们从一个复制/粘贴到另一个,从前端删除它们并将它们链接到后端版本。需要全部5分钟,无需VBA代码。
关于accdr
作为后端问题,那么是的,accdr
意味着由运行时版本的 Access 打开。使用标准版本的 Access 打开.accdr
文件将模拟运行时模式。标准版本和免费运行时版本之间的唯一区别是,您无法从运行时应用程序访问设计工具和标准功能区(您需要创建自己的工具(。
因此,将accdb
文件重命名为 accdr
只会告知在运行时模式下打开数据库的权限。它根本不会更改数据库本身。
因此,您可以将accdr
文件用作后端,而不会出现问题。
专业提示:如果您希望您的设置稍微扩展(轻松扩展到 50 个并发用户(并具有更好的性能,请从前端到后端打开数据库到虚拟表。这将在前端运行时保持连接打开,并使锁定文件在数据库上保持打开状态,从而获得更好、更可靠的性能。