我建立了一個未結合的形式與多個組合框與通過接收到SQL查詢中的參數的意圖。當所有字段包含一個值時,我的SQL都可以工作,但當一個爲空時,整個查詢失敗。我有我的每個字段的where子句設置爲各自的(tblIRS.[Field]=Forms!frmSUPIR![Field] OR Forms!frmSUPIR![Field] IS NULL OR tblIRS.[Field] IS NULL) AND (...
從值傳遞參數到查詢
我也試圖從通過變量傳遞從綁定的值,然後構建VBA的SQL以及無濟於事。每個字段的在線類似如下:
Dim strFilter As String
Dim strSQL As String
If Nz(Me.EMP1, "") <> "" Then
strFilter = strFilter & "tblIRS.[EMP1] = '" & PQ(Me.txtEMP1) & "' And " ...
strSQL = "SELECT * FROM tblIRS " & _
"WHERE" & strFilter
End If
上面包含了一個替換PQ的函數。
我發現很多資源處理上面,但沒有包括如何處理空值表和/或表格條目。
我的目標是讓用戶通過使用盡可能少的組合框儘可能縮小搜尋範圍。理想情況下,表單接受組合框中的空值,將其視爲空值,並且不顯示該字段的空值表的所有記錄。
例如:
- 形式frmSUPIR [EMP1] = [張三]
- 形式frmSUPIR [EMP2] = [瓊斯,馬克]
- 形式frmSUPIR [!!!!! EMP3] = NULL
我渴望擁有查詢返回的所有實例,其中EMP1 =史密斯,約翰和 EMP2 =瓊斯,馬克和ANY EMP3的值。什麼是最好的方式去做這件事?
希望我是不夠清楚,謝謝你提前,
JS
謝謝OpiesDad,這似乎讓我走上了正軌。運行代碼時出現語法錯誤。特別是運行時間3075.我嘗試設置然後= TRUE,=「TRUE」,='「」'。有任何建議嗎?我使用:DoCmd.OpenReport 「repSUPIR」,acViewPreview,STRSQL打開報表。再次感謝你。 – atomedic
'WHERE'之後缺少一個空格... – Gustav
我會檢查最終的SQL字符串,然後嘗試在VBA之外運行,以查看是否有任何錯誤。該錯誤通常是SQL語法錯誤。你絕對想要=「真」.....正如我所說,這將使where子句「在哪裏x和y和z ....「如果你放入= TRUE,它實際上可能工作(如果VBA自動將布爾轉換爲字符串),但它不是很好,如果你放入=」「那麼你的where子句看起來就像」WHERE x AND AND z「,這肯定不起作用 – OpiesDad