簡體   English   中英

訪問VBA錯誤3075語法錯誤(缺少運算符)

[英]Access VBA Error 3075 Syntax Error (missing operator)

在將字符串設置為和我在SSMS中預先編寫的SQL語句時,我似乎不斷遇到問題。

我有兩個相關的問題。 首先,相對於簡單查詢,我似乎只遇到了一些更復雜的查詢(幾個聯接,條件,相關子查詢和case語句)的問題。 在將SSMS中的查詢寫入VBA時,有人有什么好的資源可供我閱讀有關語法“規則”的信息?

其次,下面是我在AdventureWorks示例數據庫中編寫的查詢示例,該查詢為我提供了此問題標題中列出的錯誤。 我的T-SQL語句是:

sSQL = "SELECT ba.BusinessEntityID,ba.AddressID
              ,(CASE WHEN ba.BusinessEntityID > 5
                THEN
                (SELECT pp.FirstName FROM [Person].[Person] pp
                WHERE pp.BusinessEntityID = ba.BusinessEntityID)
               Else 'AA' END) AS 'TEST'
        FROM Person.BusinessEntityAddress ba
        INNER JOIN person.AddressType at ON at.AddressTypeID = ba.AddressTypeID
        WHERE ba.BusinessEntityID < 11;"

在“ Set rs = db.OpenRecordset(sSQL,dbOpenDynaset,dbSeeChanges)”行上發生錯誤,該行顯示:

“查詢表達式中的運行時錯誤3075語法錯誤(缺少運算符)'(案例ba.BusinessEntityID> 5然后,(從[Person]中選擇pp.FirstName。[Person] pp WHERE pp.BusinessEntityID = ba.BusinessEntityID)否則' AA'END)AS'TEST'”

嘗試這個

sSQL = "SELECT ba.BusinessEntityID,ba.AddressID
          ,(CASE WHEN ba.BusinessEntityID > 5
            THEN
            (SELECT pp.FirstName FROM [Person].[Person] pp
            WHERE pp.BusinessEntityID = ba.BusinessEntityID)
           Else 'AA' END) AS TEST 
    FROM Person.BusinessEntityAddress ba
    INNER JOIN person.AddressType at ON at.AddressTypeID = ba.AddressTypeID
    WHERE ba.BusinessEntityID < 11;"

無需在別名中使用引號。 如果必須的話,還有其他方法(例如,刪除AS或使用雙引號),但不建議這樣做。

這里的問題是,您正在嘗試在期望訪問SQL語句的地方使用TSQL語句。 Access SQL不支持CASE WHEN或TSQL支持的許多構造。

OpenRecordset方法需要一個表名,保存的查詢名或Access SQL語句。

您可以通過在Microsoft Access中創建和保存傳遞查詢來解決此問題。 創建傳遞查詢時,可以使用TSQL語句,並在傳遞查詢的屬性中將連接字符串設置為SQL數據庫。

顧名思義,Access 傳遞查詢的解析和執行傳遞給SQL Server。

保存傳遞查詢並對其進行測試后,可以按原樣使用OpenRecordset命令,只需將第一個參數替換為傳遞查詢的名稱即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM