来自多年的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。
我不明白,因为代码几乎与问题的前半部分相同。我做错了什么?
答案 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)
在开始在新平台上编码之前,您必须了解或准备一些内容。比如
在您的情况下,您还需要了解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