2017-06-25 36 views
0

Run time Error message用在哪裏以及在第SQL,訪問,VBA

大家好,跆拳道的另一個部分中我缺少什麼? 當我運行這個代碼時,我得到一個缺少的運營商運行時錯誤,請參閱附圖。

我似乎無法弄清楚。該字符串用於打開將填充表單的記錄集。

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) 

不知道我缺少什麼,任何幫助將不勝感激。

回答

0

看來你已經錯過了「」在你的字符串文字。

代替

... WHERE T1Company.LegalName = " & Me.LstboxCompanies.Column(0) & " ... 

使用:

... WHERE T1Company.LegalName = '" & Me.LstboxCompanies.Column(0) & "' ... 

您還需要逃避你的字符串,以避免命令(或SQL注入)的腐敗。有些信息請看herehere

2

考慮parameterizing query,以避免任何需要報價外殼或字符串連接。

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(撥打上面的查詢和綁定值到命名參數)

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) 
+0

我從來沒有見過這樣的事情之前,我將不得不研究ch更多....參數將進入編碼,在他們自己的功能/子或在同一個子? –

+0

完全按照我的建議運行,將SQL另存爲已保存的查詢並以張貼的方式運行VBA。 'PARAMETERS'子句在Access SQL方言中有效。注意sql查詢中的命名參數在運行時正在VBA中分配值。你遇到過任何問題嗎? – Parfait

+0

僅供參考,快照記錄集不可更新,因此不需要dbSeeChanges。 – Minty

相關問題