多选择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
相关产品推荐
相关产品推荐

