You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多选择Combo Box返回异常字符而非有效值的问题排查与解决

多选择组合框选中项写入数据库的问题及解决

我在主窗体上有一个可正常使用的多选择组合框(Combo Box),需要将选中项填充到数据库表中,供后续窗体的下拉列表使用。

初始无法正常运行的代码

Private Sub CollTypes_AfterUpdate()
Dim db as Database
Dim cct as Recordset
Dim i as Variant

Set db = CurrentDB()
Set cct = db.OpenRecordset("dbo_tbl_DefaultVehicleList", dbOpenDynaset)

For i = 0 To Me.CollTypes.ListCount - 1
   If Me.CollTypes.Selected(i) then
      cct.AddNew
      cct!CollectionMethodLU = Me.CollTypes.ItemData(i)
      cct!CruiseID = Me!CruiseID
      cct.Update
   End if
Next i

End Sub

运行上述代码时,ItemData(i)返回类似ÿ的异常字符,而非预期值。该组合框的RowSource是查询查找表中四个字段的SQL语句,绑定到第一列(AutoNumber类型),怀疑是AutoNumber类型导致了这个问题。此外,组合框设置为四列,但列宽设为0";0";0";2",仅显示最后一列。

修改后的可行代码

Private Sub CollTypes_AfterUpdate()
Dim db As Database
Dim strSQL As String
Dim cct As Recordset
Dim i As Integer
Dim varItems As Variant

Set db = CurrentDb()
Set cct = db.OpenRecordset("dbo_tbl_DefaultVehicalList", dbOpenDynaset)

currcruise = Me!CruiseID
varItems = Me!CollTypes.Value

strSQL = "DELETE * FROM dbo_tbl_DefaultVehicalList WHERE CruiseID = '" & currcruise & "'"
db.Execute strSQL, dbFailOnError

For i = LBound(varItems) To UBound(varItems)
    cct.AddNew
    cct!CruiseID = currcruise
    cct!CollectionMethodLU = varItems(i)
    cct.Update
Next i

End Sub

修改后的代码通过直接获取组合框的Value属性(多选模式下该属性返回包含所有选中值的数组),替代了原代码中遍历Selected集合并调用ItemData的方式,彻底解决了异常字符问题。同时新增了删除当前CruiseID对应旧数据的逻辑,确保每次更新后数据库表中只保留最新的选中项。

内容的提问来源于stack exchange,提问作者Susan Gottfried

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:42:08