Ms access 从MS Access中的事件运行VBA脚本

Ms access 从MS Access中的事件运行VBA脚本,ms-access,vba,odbc,Ms Access,Vba,Odbc,我创建了一个MS Access数据库,它由大约25个ODBC数据库链接组成,这些链接连接到每个数据库上的一个表。每个表都有相同的结构,但数据不同。然后,我用一个查询合并这些表,这样我就可以在一个视图中拥有所有可用的数据 我遇到的问题是,每次尝试使用报表软件(Crystal Reports)的查询时,我都必须手动连接到所有25个数据库,这非常繁琐 我制作了一个VBA连接脚本,它使用日志信息连接到每个数据库,但是我不知道如何从打开查询之类的事件触发此代码 有什么想法吗?您需要在“外部数据”选项卡上重

我创建了一个MS Access数据库,它由大约25个ODBC数据库链接组成,这些链接连接到每个数据库上的一个表。每个表都有相同的结构,但数据不同。然后,我用一个查询合并这些表,这样我就可以在一个视图中拥有所有可用的数据

我遇到的问题是,每次尝试使用报表软件(Crystal Reports)的查询时,我都必须手动连接到所有25个数据库,这非常繁琐

我制作了一个VBA连接脚本,它使用日志信息连接到每个数据库,但是我不知道如何从打开查询之类的事件触发此代码


有什么想法吗?

您需要在“外部数据”选项卡上重新链接Access数据库中的表。 进入“链接表”对话框时,请确保在单击“确定”之前单击“保存密码”选项。这将在链接表定义中存储密码信息。您刚刚创建的链接表将使用“TableName1”名称引入

在下一步中,不要打开查询。如果你不先完成这一步,它们就会破裂

从Access数据库中删除原始链接表。然后,从新链接表名称中删除“1”。这将有效地将原始链接替换为具有持久密码信息的链接


我不是100%肯定,但我相信这会解决你的问题。从Crystal Reports运行查询时,我认为没有任何方法可以触发vba或任何类型的宏,因此您的ODBC凭据需要存储在链接表定义中。

vba仅从office应用程序运行。@ckuhn203我理解。我说的是MS Access,它是Office的一部分。因此,您的mdb文件及其到25个左右表的ODBC连接以及您的联合查询在同一mdb文件中可用,作为“特定于sql的”联合查询。。。是吗?Access查询不会公开可用于运行VBA代码的事件。你可以改为从Access驱动它吗?建立连接,然后调用Crystal Report?@Blackhawk在Access应用程序会话中打开数据库时,会触发AutoExec宏。但是,如果Crystal Reports仅从db文件读取数据而不启动Access应用程序会话,则AutoExec将不会运行。我不知道Crystal如何与Access db文件交互。保存密码选项没有出现。这就是问题所在,你没看到吗?我相信它成功了!我会测试一下,然后给你奖金。顺便问一下,您知道如何通过VBA编程设置“保存密码”字段吗?我可以通过VBA创建表,但我不确定在哪里可以找到此字段。我认为在创建新的TableDef时,必须将其包含在链接表的连接字符串中,但我从来没有这样做过。