You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access 2010 VBA语句结束错误求助:构建查询字符串失败

解决VBA拼接SQL时的"Expected: end of statement"错误

你遇到的核心问题是**Section是VBA的保留关键字**,直接把它当作变量名使用时,编译器会混淆它的角色——误以为你要结束当前语句,从而抛出这个错误。下面给你几个实用的解决方案:

方案1:修改变量名(最推荐)

最简单的处理方式是把变量名改成非关键字的名称,比如strSection或者mySection,让编译器能明确识别这是一个自定义变量:

' 先把原Section的值赋值给新变量
Dim strSection As String
strSection = Section

Dim StrSql As String
StrSql = "SELECT tblOrders.*, tblFleetVendors.* FROM tblOrders INNER JOIN tblFleetVendors ON tblOrders.VendorId = tblFleetVendors.VendorID"
StrSql = StrSql & " WHERE (tblOrders.OrderingOrg = '" & strSection & "') And (VendorID <> 774) And (tblOrders.OrderID = " & Req & ")"

方案2:用方括号包裹变量名

如果一定要保留Section作为变量名,可以用方括号[]把它括起来,明确告诉VBA这是一个变量,而非语法关键字:

Dim StrSql As String
StrSql = "SELECT tblOrders.*, tblFleetVendors.* FROM tblOrders INNER JOIN tblFleetVendors ON tblOrders.VendorId = tblFleetVendors.VendorID"
StrSql = StrSql & " WHERE (tblOrders.OrderingOrg = '" & [Section] & "') And (VendorID <> 774) And (tblOrders.OrderID = " & Req & ")"

额外建议:使用参数化查询(更安全健壮)

直接拼接字符串不仅容易遇到关键字/特殊字符问题,还存在SQL注入风险。推荐用参数化查询替代字符串拼接,从根源上避免这类问题:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim StrSql As String

StrSql = "SELECT tblOrders.*, tblFleetVendors.* FROM tblOrders INNER JOIN tblFleetVendors ON tblOrders.VendorId = tblFleetVendors.VendorID"
StrSql = StrSql & " WHERE (tblOrders.OrderingOrg = [pSection]) And (VendorID <> 774) And (tblOrders.OrderID = [pReq])"

Set db = CurrentDb()
Set qdf = db.CreateQueryDef("", StrSql)
' 给参数赋值
qdf.Parameters("[pSection]") = Section
qdf.Parameters("[pReq]") = Req

' 打开记录集进行后续处理
Set rs = qdf.OpenRecordset()

' 记得最后释放对象
rs.Close
Set rs = Nothing
Set qdf = Nothing
Set db = Nothing

内容的提问来源于stack exchange,提问作者Perry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:02:45