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
相关产品推荐
相关产品推荐

