访问 VBA 简单 sql 选择语句

Posted

技术标签:

【中文标题】访问 VBA 简单 sql 选择语句【英文标题】:Access VBA simple sql select statement 【发布时间】:2016-02-18 06:16:37 【问题描述】:

在多年的 Web 开发中 php 和 SQL 语句非常简单,我最近需要使用 MS Access 和 VBA 完成的这项任务绝对让我知道它使 SQL 语句变得多么复杂。请注意,我没有关于 VBA 的先验知识,所以它可能非常简单,我不只是得到它,但我想做的只是

"SELECT type FROM tblMatter WHERE id='$id'"

当我戴上我的 PHP 帽子时,我想好吧,我们将有一行数据,这将是一个数组,我想要一个对象从该数组中取出。很简单。

然而,VBA 使 $#!t 变得复杂。到目前为止,我的代码看起来像这样

Dim matterSQL As String
Dim matterRS As Recordset

matterSQL = "SELECT type FROM tblMatter WHERE id'" & id & "'"
Set matterRS = CurrentDb.OpenRecordset(matterSQL)

MsgBox matterRS![type]

CurrentDb 在代码中更早地定义以打开与数据库的连接,错误出现在包含 OpenRecordset 的行上,错误为:标准表达式中的数据类型不匹配 . 正如我所说,我是 VBA 的新手,所以我不知道我在做什么,而且互联网上的所有文档都没有帮助。但我想做的只是从表中获取一条数据。

提前致谢!


编辑:我需要在此基础上使用另一个查询来获取上一个查询中的信息来运行。同样的考验:

Dim costSQL As String
Dim costRS as Recordset

costSQL = "SELECT email FROM tblScaleOfDisb WHERE category=" & category
Set costRS = CurrentDb.OpenRecordset(costSQL)

MsgBox costRS![email]

这一次我在包含OpenRecordset 的行上遇到错误:参数太少。预计 1。 我不明白,因为代码实际上与问题的前半部分相同。我做错了什么?

【问题讨论】:

where id ='"&id&"'"?也尝试使用参数化查询 id的数据类型是什么? How to debug dynamic SQL in VBA -- 另外:字符串、数字和日期在 SQL 中需要不同的格式。但这对于 Access VBA/SQL 来说并没有什么特别的。 【参考方案1】:

您在条件中缺少=

下面试试

matterSQL = "SELECT type FROM tblMatter WHERE id='" & id & "'"

如果id 是数字,则不需要'

matterSQL = "SELECT type FROM tblMatter WHERE id=" & id 

参数太少。预计 1。 当您的 sql 查询中的字段名称与表字段名称不匹配时,会发生这种情况 如果字段名称正确,我相信类别的数据类型不是数字,那么您必须使用'

costSQL = "SELECT email FROM tblScaleOfDisb WHERE category='" & category &"'"

始终尝试使用参数化查询来避免 SQL 注入

【讨论】:

愚蠢的我在创建问题时没有复制=。但是我确实在您的问题中实施了第二个建议,并且确实解决了我的问题,但是还有另一半让我感到困惑,编辑了问题以反映斗争 @SteppingHat 类别是数字还是字符? 我没有将其添加为不同的答案,因为我同意@sachu....但我认为使用dlookup() 可以使第一个查询更简单 @Sachu ID 是一个数字,类别是一个字符串。现在一切都说得通了。感谢您的帮助! @SteppingHat 很高兴它有帮助。【参考方案2】:

在开始在新平台上编码之前,您必须了解或准备一些东西。比如

    使用关键字/保留关键字 捕获错误 基本算术运算/字符串运算。 可用的功能/方法 使用变量后清理变量的方法

在您的情况下,您还需要了解 MS ACCESS SQL。这与标准 SQL 非常相似,但(仅限于并)受 MS Access 内部函数的强烈影响。

SQL 执行将返回 n 行作为结果。每行将有 n 列。您需要了解如何循环遍历结果集。

请有一些错误捕获方法。在 Google 上花费数小时之前,我会帮助您了解方向。

在您的第一个 SQL 中:您有一个保留关键字 Type。使用方括号来转义保留的关键字。在 where 条件下,数字字段不能有字符串引号,而字符串必须有它们。

提示:您可以使用 MS Access 可视化查询构建器来构建您的查询并将 SQL 复制到 VBA。

MS ACCESS 中的保留关键字列表:https://support.microsoft.com/en-us/kb/286335

函数列表:http://www.techonthenet.com/access/functions/

错误处理:http://allenbrowne.com/ser-23a.html

在使用后通过明确设置为空来清理/关闭您的对象:Is there a need to set Objects to Nothing inside VBA Functions

【讨论】:

以上是关于访问 VBA 简单 sql 选择语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 访问的子窗体中显示 Select SQL 语句的结果?

访问 SQL Server 的 VBA 查询

SQL 错误访问 2010 VBA 更新命令

Excel-VBA 访问 sql server 表进行选择和插入太慢

如何在 SQL 语句中引用组合框并在 VBA 中运行该语句

内部连接 ​​VBA 访问