代码
strSQL = "SELECT tblHS_area_fields.hsaf_id " _
& "FROM tblHS_area_fields " _
& "WHERE (((tblHS_area_fields.hs_area_id)=" & hs_area_id & ") AND ((tblHS_area_fields.hsf_id)=13))"
Set rs = db.OpenRecordset(strSQL)
错误
尝试从窗体运行时的错误是:
Extra ) in query expression '(((tblHS_area_fields.hs_area_id)=" &
> hs_area_id & ") AND ((tblHS_area_fields.hsf_id)=13))'
从即时窗口获取错误:
Compile error: expected: line number or label or statement or end of statement
所有字段都是数字。
VBA代码和SQL语句有什么问题?
只需删除sql:中的所有括号
strSQL = "SELECT tblHS_area_fields.hsaf_id " & _
"FROM tblHS_area_fields " & _
"WHERE tblHS_area_fields.hs_area_id = " & hs_area_id & " AND tblHS_area_fields.hsf_id = 13 "
在这种情况下,您不需要括号。
不是答案,但对于注释来说太长了:
下次,添加一个Debug.Print strSql
,然后在SQL视图中创建一个查询,从调试窗口(ctrl+G)复制您的SQL语句,并将您的语句粘贴到那里
或者直接粘贴到Visual Studio中
然后您应该快速查看问题
考虑在执行Debug.print(strSQL)
之前调试打印并记录SQL。
左括号必须与右括号匹配
一些分解有助于识别和匹配,正确的是:
strSQL = "SELECT hsaf_id" _
& " FROM tblHS_area_fields" _
& " WHERE (" _
& "( hs_area_id =" & hs_area_id & ")" _
& " AND ( hsf_id = 13 )" _
& ")"
对于SQL模板,您还可以使用字符串替换函数或使用自定义函数进行字符串模板化。请参见VBA字符串插值语法。