[英]Where with And Clause SQL, Access-VBA
Hi Everyone, Another Installment of WTF am I missing? 大家好,我想念另一部分WTF吗? When I run this code I get a missing operator run-time Error, see attached photo.
当我运行此代码时,出现缺少的操作员运行时错误,请参见所附照片。
I can't seem to figure it out. 我似乎无法弄清楚。 This string is used to open a recordset that will populate a form.
此字符串用于打开将填充表单的记录集。
Private Sub BtnUseSelection_Click()
Dim CompSQL As String
CompSQL = "SELECT T1Company.LegalName, T2AddressType.AddressType, T1Addresses.City" & _
" FROM T2AddressType INNER JOIN (T1Addresses INNER JOIN (T1Company INNER JOIN T3Company_Addresses ON T1Company.CompanyID = T3Company_Addresses.CompanyID) ON T1Addresses.AddressID = T3Company_Addresses.AddressID)" & _
" ON T2AddressType.AddressTypeID = T1Addresses.AddressType" & _
" WHERE T1Company.LegalName = " & Me.LstboxCompanies.Column(0) & " And T2AddressType.AddressType = " & Me.LstboxCompanies.Column(1) & " And T1Addresses.City = " & Me.LstboxCompanies.Column(2)
Set db = CurrentDb
Set RSCompany = db.OpenRecordset(CompSQL, dbOpenSnapshot, dbSeeChanges)
Not quite sure what I am missing, any help would be greatly appreciated. 不太确定我缺少什么,将不胜感激。
Consider parameterizing query to avoid any need for quote enclosure or string concatenation. 考虑使用参数化查询来避免使用引号引起来或字符串串联。
SQL (save below as a saved Access query, more efficient than VBA string query as database engine saves best execution plan) SQL (以下保存为Access查询,比VBA字符串查询效率更高,因为数据库引擎保存了最佳执行计划)
PARAMETERS [LegalNameParam] Text(255), [AddressTypeParam] Text(255),
[CityParam] Text(255);
SELECT T1Company.LegalName, T2AddressType.AddressType, T1Addresses.City
FROM T2AddressType
INNER JOIN (T1Addresses INNER JOIN (T1Company
INNER JOIN T3Company_Addresses
ON T1Company.CompanyID = T3Company_Addresses.CompanyID)
ON T1Addresses.AddressID = T3Company_Addresses.AddressID)
ON T2AddressType.AddressTypeID = T1Addresses.AddressType
WHERE T1Company.LegalName = [LegalNameParam]
AND T2AddressType.AddressType = [AddressTypeParam]
AND T1Addresses.City = [CityParam]
VBA (call the above query and bind values to named parameters) VBA (调用上面的查询并将值绑定到命名参数)
Dim db As Database, RSCompany As Recordset, qdef As QueryDef
Dim CompSQL As String
Set db = CurrentDb
Set qdef = db.QueryDefs("myStoredQuery")
qdef!LegalNameParam = Me.LstboxCompanies.Column(0)
qdef!AddressTypeParam = Me.LstboxCompanies.Column(1)
qdef!CityParam = Me.LstboxCompanies.Column(2)
Set RSCompany = qdef.OpenRecordset(dbOpenSnapshot, dbSeeChanges)
It seems you've missed the ' ' around your string literals. 似乎您错过了字符串文字周围的“”。
instead of 代替
... WHERE T1Company.LegalName = " & Me.LstboxCompanies.Column(0) & " ...
use: 采用:
... WHERE T1Company.LegalName = '" & Me.LstboxCompanies.Column(0) & "' ...
You also need to escape your strings to avoid corruption of the command (or sql injections). 您还需要转义字符串,以避免损坏命令(或sql注入)。 Look here and here for some info.
在这里和这里查看一些信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.