我有一個問題,我覺得我接近解決問題,但缺少一些東西。我有一個包含五個對象的未綁定表單。訪問 - 使用Multiselect Listbox更新表單值的查詢VBA
'SSN'是一個標準的文本框。 '約會狀態'是啓用了多選的列表框。源是一個名爲States的表。 'Carrier'是一個組合框。 '約會狀態'是一個組合框。 '應用程序請求日期'是一個日期字段。
一旦所有五個對象都有值,我有一個運行下面代碼的按鈕。我想將值傳遞給更新查詢以用作條件。
正在更新的字段是「約會狀態」和「應用程序請求日期」。其他字段是選擇正確的記錄。
當前代碼運行,並且更新查詢接收大部分條件。唯一沒有正確填充的字段是「約會狀態」,我認爲這會從strCriteria中獲得。
代碼運行時,它會要求用戶在需要從「約會狀態」列表框中拉出時填充strCriteria值。
我找到了一個網站的代碼,告訴如何從多選列表框中獲取值,然後爲一個標準選擇查詢創建SQL。我試圖儘可能地適應它。主要的區別是SQL構建。當我使用原件時,它可以工作。
我修改後的代碼運行更新查詢:
Private Sub Command35_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String
Set db = CurrentDb()
Set qdf = db.QueryDefs("Appointment Update Query")
If Me![Appointment State].ItemsSelected.Count > 0 Then
For Each varItem In Me![Appointment State].ItemsSelected
strCriteria = strCriteria & "States.States = " & Chr(34) _
& Me![Appointment State].ItemData(varItem) & Chr(34) & " OR "
Next varItem
strCriteria = Left(strCriteria, Len(strCriteria) - 3)
Else
strCriteria = "States.States Like '*'"
End If
strSQL = "UPDATE [Appointment Query]" _
& " SET [Appointment Query].[Appointment Status] = [Forms].[Appointment Update].[Appointment Status], [Appointment Query].[Appt Request Date] = [Forms]![Appointment Update].[Appt Request Date]" _
& " WHERE ((([Appointment Query].SSN)=[Forms]![Appointment Update].[SSN]) AND (([Appointment Query].[Appointment State])=" & strCriteria & ") AND (([Appointment Query].Carrier)=[Forms]![Appointment Update].[Carrier]));"
qdf.SQL = strSQL
qdf.Close
DoCmd.OpenQuery "Appointment Update Query"
Set db = Nothing
Set qdf = Nothing
End Sub
原始代碼:
Private Sub cmdOK_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String
Set db = CurrentDb()
Set qdf = db.QueryDefs("qryMultiSelect")
If Me!lstRegions.ItemsSelected.Count > 0 Then
For Each varItem In Me!lstRegions.ItemsSelected
strCriteria = strCriteria & "tblData.Region = " & Chr(34) _
& Me!lstRegions.ItemData(varItem) & Chr(34) & "OR "
Next varItem
strCriteria = Left(strCriteria, Len(strCriteria) - 3)
Else
strCriteria = "tblData.Region Like '*'"
End If
strSQL = "SELECT * FROM tblData " & _
"WHERE " & strCriteria & ";"
qdf.SQL = strSQL
DoCmd.OpenQuery "qryMultiSelect"
Set db = Nothing
Set qdf = Nothing
End Sub
我如何能得到這個正常工作任何想法?
Debug.Print STRSQL:
UPDATE [Appointment Query] SET [Appointment Query].[Appointment Status] = [Forms].[Appointment Update].[Appointment Status], [Appointment Query].[Appt Request Date] = [Forms]![Appointment Update].[Appt Request Date] WHERE ((([Appointment Query].SSN)=[Forms]![Appointment Update].[SSN]) AND (([Appointment Query].[Appointment State])=States.States = "AL" OR States.States = "AZ") AND (([Appointment Query].Carrier)=[Forms]![Appointment Update].[Carrier]));
Debug.Print strCriteria:
States.States = "AL" OR States.States = "AZ"
美國是表中的狀態縮寫的名字,第二個是國家的字段名。
我試圖插入你的代碼,但它沒有奏效。我玩弄它,並得到它輸出strCriteria爲:「AL」或「AZ」與:如果我![約會狀態] .ItemsSelected.Count> 0然後 對於我的每個varItem![約會狀態] .ItemsSelected strCriteria = strCriteria&CHR(34)_ 與我[預約狀態] .ItemData(varItem)CHR(34)& 「OR」 接着varItem strCriteria =左!(strCriteria,LEN(strCriteria) - 3) Else strCriteria =「=」「」&Me![Appointment State]&「」「」 End If' – CasWalker
我爲混亂的混亂道歉,試圖弄清楚如何正確格式化評論...隨着編輯到目前爲止代碼確實會運行並將字段傳遞給查詢條件。有一個問題,因爲它沒有更新正確的行數。如果選擇了一個狀態值,它似乎會拉出正確的記錄。如果使用了兩個,它會拉動比它應該更多的記錄。我假設它與沒有引號的文本字段有關?我不知道如何將它們與括號內的字段整合...我嘗試了幾種不同的方法,但每次都會拋出一個錯誤。 – CasWalker
每當您進行更改時,請更新您的代碼和上面產生的調試信息,以便我們看到發生了什麼。我將在最後一個回答中用雙引號更新strSQL語句 – dbmitch