2016-02-16 108 views
-1

在我設置有條件的基於值列表框行來源:陷阱語法錯誤編譯

如果myvalue的=「」然後
Me.MyList.RowSource =「SELECT ...
FROM .. 。
RIGHT JOIN ...
GROUP BY ...
ORDER BY ...
否則
Me.MyList.RowSource =「SELECT ...
FROM ...
RIGHT JOIN ...
GROUP BY ...
HAVING myvalue的
ORDER BY ...
結束時,如果

哪裏myvalue的是在HAVING部分的一些標準。 只要MyValue不是「」(空白),這工作正常。但是,在編譯期間,我收到了一個Microsoft Access錯誤:「HAVING子句的語法錯誤。」在運行期間,帶有HAVING的「else」不會發生,因此在那裏沒有錯誤。如何避免或捕獲「HAVING子句中的語法錯誤」。編譯期間?通常的「On error ...」在編譯期間不會陷入。

謝謝。

+1

VBA編譯器不顯示SQL字符串中的語法錯誤。您應該向我們展示您的*實際*代碼。 – Andre

回答

1

編譯器無法將代碼插入到列表框中並檢查結果。但是,一些好的做法會幫助你解決這個問題。

Dim strRowSourceSQL as String 

strRowSourceSQL = "SELECT ... FROM ... RIGHT JOIN ..." 

If MyValue = "" then 
    strRowSourceSQL = strRowSourceSQL & "MORE SQL HERE" 
else 
    strRowSourceSQL = strRowSourceSQL & "DIFFERENT SQL HERE" 
end if 

Me.MyList.RowSource = strRowSourceSQL 

這種安排將讓你檢查strRowSourceSQL。設置一個斷點和...

Debug.Print strRowSourceSQL 

一旦你有了這些,放入查詢編輯器,並修復了什麼是錯的。另外,請按照these principles

0

感謝您的建議,但我發現了問題。

事實證明,我對屬性表中有一個有問題的HAVING子句的列表框的剩餘查詢定義。當我從屬性表中刪除定義時,表單打開時沒有惱人的語法錯誤。我原來發布的vba代碼很好。