【发布时间】:2016-06-08 20:30:03
【问题描述】:
我有一个问题,我觉得我快要解决了,但我错过了一些东西。我有一个包含五个对象的未绑定表单。
'SSN' 是标准文本框。 “约会状态”是启用了多选的列表框。源是一个名为 States 的表。 'Carrier' 是一个组合框。 “约会状态”是一个组合框。 “Appt Request Date”是一个日期字段。
一旦值在所有五个对象中,我就有一个运行下面代码的按钮。我想将值传递给更新查询以用作条件。
正在更新的字段是“约会状态”和“约会请求日期”。其他字段用于选择正确的记录。
当前代码运行,更新查询接收大部分条件。唯一没有正确填充的字段是“约会状态”,我认为它会从 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"
States是州缩写所在的表名,第二个States是字段名。
【问题讨论】:
标签: vba ms-access listbox multi-select