尝试通过 VBA 创建查询,但即使我引用了 MS Access 15.0 对象库,也无法使用任何 DAO

Posted

技术标签:

【中文标题】尝试通过 VBA 创建查询,但即使我引用了 MS Access 15.0 对象库,也无法使用任何 DAO【英文标题】:Trying to create a query via VBA but can't use any DAO even though I have MS Access 15.0 Object Library referenced 【发布时间】:2018-04-19 07:51:27 【问题描述】:

我刚刚注册了 ***,这是我的第一个问题。我正在做我的第一个 Access 项目。尽管我对在 Excel 中使用 VBA 有一定的熟练程度,但这实际上只是一般的编程知识,并在网上搜索其他人给我语法。我还没有完全弄清楚对象、方法等是如何工作的。

我们以专有格式存储数据,可以将其保存为 CSV。数据包含基于时间的数据点。我能够在 Excel 中完成需要完成的工作,但是当我们超过一百万行时,这一切都失败了。 Access 轻松处理任务,但现在我需要创建一些代码来将数据导入具有关系的表中(完成),创建查询(卡在此处),允许用户选择时间范围并将时间范围内的数据导出到Excel 电子表格(后两个我应该可以)。

正如我一直使用 Excel 所做的那样,我在网络上寻找了正确的语法,但一切似乎都使用了 DAO 参考。做一些事情,如使用声明数据库 DIM db 作为 DAO.Database 失败并出现编译错误:未定义用户定义的类型。 我读到 Microsoft Access 15.0 对象库应该运行所有 Microsoft DAO 3.6 对象库代码,但不适合我。

所以在这个冗长的解释之后,我可以使用两个问题之一的答案。

    我是否在引用或编码方面做错了,可以让我使用 CreateQueryDef 和其他人? 还有其他方法可以在不使用 DAO 工具的情况下创建查询吗?

这是我在任何论坛上的第一个问题。我一直设法找到一个我可以工作的解决方案。希望我没有违反太多“如何发布问题”规则。对此的任何帮助将不胜感激。

非常感谢。

托尼普

【问题讨论】:

我会回答你的第二个问题:是的。 DAO 是“古老的”。大约 20 年前,它被 ADO 取代。要了解如何使用 ADO(我推荐),请开始 here。要创建查询,请阅读 ADO 命令对象 here。 @BobRodes 如果你想发布新的事实,DAO 是古老的还是错误的,你可以这样做here。从 Office 2007 开始,DAO 在 Access 中比 ADO 可以做的更多,例如使用 Attachment 字段类型(这可能应该避免,但很好)。恕我直言,您应该在 Access 中使用它,因为它是原生访问,并且不应该在访问之外使用它 见下面古斯塔夫的回答。我的回答显然有点过时了。 【参考方案1】:

鲍勃跑题了。大约 15 年前,有人尝试在 Access 中推动 ADO,但收效甚微。

因此,从 Access 2007 开始,DAO 再次成为默认和首选引擎。

但是,它已被重命名,这就是您可能缺少的参考:

Microsoft Office xx.0 Access 数据库引擎对象库

在您的代码中,它仍然是 DAO。

【讨论】:

很抱歉,感谢您让我知道。我想我是 15 年前的那些“推动者”之一,尽管我从未使用 ADO 和 Access 编写过应用程序。 感谢该库的名称。不幸的是,我仍然有一个问题,我想我一直都有这个问题。最初,当我尝试加载 Microsoft DAO 2.6 对象库时,我会在加载 DLL 时遇到错误。由于您将我指向 Office xx.0 Access 库,我想我更好地理解了我的问题。我有适用于 Office 应用程序的 Office 15,还有适用于 Skype for Business 的 Office 16。可用参考中仅列出了 Office 16 Access。当我使用 Browse... 选择 ACEDAO.DLL 时,没有任何反应。这是正确的文件吗?我做错了吗? 不要浏览它。如果已安装,则会列出它。并删除 DAO 2.6。 仅列出了 Microsoft Office 16.0 Access 数据库引擎对象库。当我选择它时,我得到“加载 DLL 时出错”。 然后要么安装被冲洗,要么发生其他事情。【参考方案2】:

我没有看到标准查询设计视图功能的提及。你在哪里使用这个?

这是非常有用的,因为一旦使用可视化设计视图进行查询,可以选择将其放入 SQL 视图中,这将为您提供语法......然后可以更轻松地将该语法移植到如果必须使用 vba 语句 - 尽管目前尚不清楚为什么必须通过 vba 定义查询。

【讨论】:

这基本上就是我最终所做的,并发现正确的语法是 DoCmd.RunSQL "CREATE TABLE [Settings] (ID NUMBER PRIMARY KEY, NumFiles NUMBER, FileDate DATE, FFolder TEXT, FTagname TEXT, FFloat TEXT, FString TEXT, TtlTags NUMBER, TtlFloat NUMBER, TtlString NUMBER, noFloat TEXT, noString TEXT);"谢谢。

以上是关于尝试通过 VBA 创建查询,但即使我引用了 MS Access 15.0 对象库,也无法使用任何 DAO的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2010 vba 查询

运行查询时出现运行时错误 3075 MS Access VBA

使用 VBA 从 MS Access 发送电子邮件

MS Access中的VBA中不接受变量名称

MS Access VBA参考

MS Access VBA 导出查询结果