vba - 为什么一些 SELECT 语句打开一个 RecordSet,而另一些则返回“错误 13,类型不匹配”
问题描述
首先,让我声明这个问题是针对 Access 应用程序中的 VBA 的。现在,这是一个更长查询的子查询,但我想在尝试构建更大的查询之前先了解基础知识。
无论出于何种原因,以下代码行成功打开了一个 DAO.Recordset,我可以循环访问,执行以下操作:
Dim testRS As DAO.Recordset
testQuery = "SELECT * FROM midsecurity_city
INNER JOIN itincity ON midsecurity_city.cityid4security = itincity.city_id;"
Set testRS = CurrentDb.OpenRecordset(testQuery)
这是在两个不同模式中的两个不同表中比较 BIGINT 类型的两个列。
现在,下面还比较了两个不同表中的两个类型为 VARCHAR 的列,这两个表也包含在两个不同的模式中。我包括所有这些详细信息,因为我对 Access 还很陌生,并且不确定这些信息是否对我的问题有影响。对于它的价值,我正在使用 Postgres 数据库。
此查询给我一个“错误 13:类型不匹配”消息,然后取消执行。
Dim testRS As DAO.Recordset
testQuery = "SELECT * FROM itincity INNER JOIN itinerary ON itincity.city =
itinerary.city;"
Set testRS = CurrentDb.OpenRecordset(testQuery)
我的假设是 Access 真的讨厌 JOINS 涉及除两列的 INTEGER 比较之外的任何内容?我在这方面接近准确吗?如果是这样,有没有办法绕过这个限制,或者有没有另一种方法可以完全解决这样的问题?任何关于 JOINS 如何在 Access 中工作的教育材料也将受到赞赏,因为它们似乎不像在 pgAdmin 中运行查询那样遵循相同的规则。
谢谢您的帮助。我已经研究这个问题大约一个星期了。
解决方案
好吧,“解决方案”似乎正如我所料。Access 只是讨厌涉及基于文本的列的 JOINS。作为一种变通方法,我在似乎最依赖于另一个的表中添加了一个外键 (FK)。该 FK 列被指定为类型“BIGINT”。现在,我的包含大量 INNER JOINS(现在所有这些都使用 bigints)的大规模查询可以轻松工作。
但是,我仍然对 Access 拒绝文本 JOINS 的原因感到好奇……似乎它应该是完全可以接受的。
推荐阅读
- android - kotlin android 底部导航片段 setRetainInstance(true)
- bookshelf.js - Bookshelf.js-nested withRelated() (相当于多个内连接)
- jquery - jquery onclick 参数
- angular - Angular-material 按钮不会在 ionic 3 应用程序中呈现
- arrays - 单变量样条之间的基本操作
- c++ - 我无法在 Cygwin 中使用 Visual Studio 中的 cpp 文件
- flutter - 在 Flutter 中使用 OneSignal
- ruby-on-rails - 使用 Ruby on Rails 进行命名空间布局渲染
- java - 在 elasticsearch 上安装我的插件时杰克逊 jar 地狱
- r - 从并行化的 for 循环返回结果