sql - 从access vba中的多值组合框中获取值

标签 sql vba ms-access

我有一个表单,用于收集将插入到 Access 2016 中的数据库表中的信息。我的表单有一个多值组合框(称为 cmbContacts),用于从联系人表(ID 和 ID)中提取值。姓名)。用户可以从组合框中选择 0 个或多个联系人。当用户单击提交按钮时,button_click 事件会触发 VBA 代码来格式化信息并将其插入表中。

我需要做的是从组合框中获取每个选定联系人的 ID。

这是我到目前为止所拥有的:

If Me.cmbContacts.ItemsSelected.Count > 0 Then 'Only run code if there are contacts selected'
    'Select the most recently added entry (added right before this if statement)'
    Dim rs As DAO.Recordset, Max As Integer
    SQL = "SELECT MAX(ID) FROM Breweries"
    Set rs = CurrentDb.OpenRecordset(SQL)
    Max = rs.Fields(0)
    'Insert each selected Contact ID into Breweries.[Contact Names].Value'
    Dim itm As Variant
    For Each itm In Me.cmbContacts.ItemsSelected
        SQL = "INSERT INTO Breweries ([Contact Names].[Value]) VALUES (" + itm + ") WHERE ID=" + Max
        CurrentDb.Execute (SQL)
    Next itm
End If

一些问题:

  • Me.cmbContacts.ItemsSelected.Count 始终等于 0,无论在组合框中选择了多少个项目
  • 由于 cmbContacts.ItemsSelected 不包含所选项目,因此 for 循环不会运行。我不确定为什么它没有注册所选项目

最佳答案

如果组合框选择/填充了 1 个以上的项目,则您可以使用 Ubound() 来找出有多少个。

IF UBound(Me.cmbContacts.OldValue) > 0
    For i = LBound(Me.cmbContacts.OldValue) To UBound(Me.cmbContacts.OldValue)
       SQL = "INSERT INTO Breweries ([Contact Names].[Value]) VALUES (" + Me.cmbContacts.OldValue(i) + ") WHERE ID=" + Max
        CurrentDb.Execute (SQL)
    Next i
END IF

请记住,如果仅选择一个值或未选择任何值,则会出现类型不匹配的错误,并且您必须以某种方式处理此问题。

希望这有帮助..

关于sql - 从access vba中的多值组合框中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899116/

相关文章:

sql - postgres中的两个外键

vba - 无法正确取消Application.Inputbox

c# - Access sql 以使用自动编号创建表

ms-access - Access : list query dependencies

sql - 如何在 Web SQL 中重命名数据库?

sql - 是否可以在 PostgreSQL 中创建可为空的外键约束?

vba - Excel 函数返回下周星期一的日期

sql - MS Access Year(Date() 函数

sql - 在 PostgreSQL 的连接表达式中使用子字符串时出现语法错误

vba - 使用 Application.Run 调用宏会出现错误 1004