在MSAccess中使用ADO从另一个mdb文件打开一个表

时间:2015-05-13 19:52:26

标签: vba ms-access access-vba

我试图从另一个mdb文件访问一个表。这不是链接表可以解决的问题,请不要提出建议。

编辑:这是归档工具的一部分,该工具从特定日期范围创建数据库后端的备份文件,然后删除数据。在删除数据之前,建议我检查并确保将所有数据复制到创建的备份中。 (IE,如果最坏的情况发生并且共享文件夹丢失连接或者其他东西,并且没有复制过的所有数据,但访问数据库仍然删除了该数据)

如果有一种方法可以在访问中创建一个链接表,然后删除最后一个WITH VBA的链接,而不是手动,也许这会起作用(?)但我希望这样做,所以希望它不会导致数据库膨胀的程度与过去一样多。

在删除当前数据库中的数据之前,我试图检查是否所有数据都复制到备份文件中。

Dim rs as ADODB.Recordset
rs.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" & _
                 "Dbq=Backup.mdb;DefaultDir=C:\Fish;"

我在语法方面遇到了麻烦。我知道它适用于currentdb,但是如果该表位于不同的mdb文件中该怎么办?我尝试使用DefaultDir = C:\ Fish和DefaultDir = C:\ Fish \我有什么遗漏或者这比我应该尝试的要复杂得多吗?

其余部分我认为我理解如何让字段值进行比较,但是尝试连接到不同mdb文件中的表会给我带来麻烦。

1 个答案:

答案 0 :(得分:2)

首先:就像戈德在评论中已经说过的那样,我也看不出使用链接表的原因。

但最后,如果您创建链接表并在其上打开本地Recordset,或者直接在其他Access数据库中的表上打开Recordset,则无关紧要

因此,我将展示两种方式的解决方案:

1。你问题的方法

您的连接字符串适用于我,但其余代码中存在错误:

  • ADODB.Recordset没有属性ConnectionString ...而是名为ActiveConnection
  • 在尝试设置连接字符串或打开Recordset之前,您需要实际创建新的ADODB.Recordset

以下代码适用于我:

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)};" & _
                 "Dbq=Backup.mdb;DefaultDir=C:\Fish;"

rs.Open "select * from foo"

2。使用链接表

创建它:

DoCmd.TransferDatabase acLink, "ODBC", ";DATABASE=C:\Fish\Backup.mdb", acTable, "TableName", "TableNameLocal", False

注意:TableName是源表的原始名称,TableNameLocal是链接表在本地数据库中的名称。 (当然,如果你愿意,可以使用相同的名称)

删除它:

DoCmd.DeleteObject acTable, "TableNameLocal"