访问VBA简单的sql select语句

时间:2016-02-18 06:16:37

标签: sql vba ms-access access-vba

来自多年的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。
我不明白,因为代码几乎与问题的前半部分相同。我做错了什么?

2 个答案:

答案 0 :(得分:2)

条件

中缺少=

尝试以下

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注入

答案 1 :(得分:0)

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

  1. 使用关键字/保留关键字
  2. 捕获错误
  3. 基本算术运算/字符串运算。
  4. 可用的功能/方法
  5. 使用后清除变量的方法
  6. 在您的情况下,您还需要了解MS ACCESS SQL。这与标准SQL非常相似,但(受限于和)受MS Access内部函数的强烈影响。

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

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

    第一个SQL 中的

    :您有一个保留关键字类型。使用方括号来转义保留关键字。在条件数字字段必须没有字符串引号,字符串必须具有它们。

    提示:您可以使用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