...當超過一個項目被選中,我得到錯誤」語法錯誤(逗號)在查詢表達式中「,在以下代碼行上:intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null")
這很有道理。如果列表框選擇是「field1」,「field3」和「field4」,則DCount()
會在查詢表達式'field1,field3,field4中爲空'時拋出錯誤#3075,「」語法錯誤(逗號)「
的DCount()
表達想這個SELECT語句進行評估:
SELECT Count(*)
FROM Scrubbed
WHERE field1,field3,field4 Is Null
和DB引擎肯定會抱怨說WHERE
條款。你不能給它一個字段名稱列表,並詢問它是否爲列表Is Null
。您將不得不分別詢問每個字段Is Null
。
這就是你爲什麼得到那個錯誤的解釋。不過,我認爲你需要改變你的方法。
構建RowSource
值列表字符串爲Fields_Values
當您迭代通過List101
選定的項目。 (請確保您的值列表爲Fields_Values
的行來源類型屬性。)以下是一個經過測試的樣本,它可以完成我認爲您需要的功能。
Private Sub Command29_Click()
Dim strCriteria As String
Dim intCountNull As Integer
Dim varItem As Variant
Dim strRowSource As String
Me.Fields_Values.RowSource = ""
For Each varItem In Me!List101.ItemsSelected
strCriteria = "[" & Me!List101.ItemData(varItem) & _
"] Is Null"
intCountNull = DCount("*", "Scrubbed", strCriteria)
'Debug.Print strCriteria, intCountNull '
strRowSource = strRowSource & ";" & intCountNull & _
" null values found in " & _
Me!List101.ItemData(varItem)
Next varItem
'Debug.Print strRowSource '
If Len(strRowSource) > 0 Then
strRowSource = Mid(strRowSource, 2)
Me.Fields_Values.RowSource = strRowSource
End If
'Debug.Print strRowSource '
End Sub
此外,我不明白爲什麼用戶甚至應該被允許單擊Command29
除非List101
包含選定的項目。因此請考慮禁用Command29
,直到做出選擇。
Private Sub Form_Load()
Me.Command29.Enabled = False
End Sub
Private Sub List101_AfterUpdate()
Me.Command29.Enabled = (Me.List101.ItemsSelected.Count > 0)
End Sub
最後,我會建議你請你幫個忙,通過給你的控件有意義的名字...... Command29
可能是cmdShowNullCounts
和List101
可能是lstFieldNames
。有意義的名字在處理數十個控件時特別有用。在幾個月後需要重新訪問表單設計時,您還應該發現它們很有幫助。任何未來需要接管的人都會感謝您的禮遇。
你想要什麼?和每個標準或每個OR?甚至分開計數?你應該寫出strCriteria並調整你的代碼來給你需要的行。 – Fionnuala 2012-08-07 16:24:01
我需要單獨的行和單獨的計數選擇每個項目。 – JenPhyllisB 2012-08-07 17:23:49
那麼你如何看待這個'Fields_Values.RowSource'工作? – Fionnuala 2012-08-07 18:48:53