从access vba

时间:2016-04-27 19:24:27

标签: sql vba access

我有一个表单,我用它来收集将插入到Access 2016中的数据库表中的信息。我的表单有一个多值组合框(称为cmbContacts),它从Contacts表中提取值( 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 个答案:

答案 0 :(得分:0)

如果组合框中选择/填充了多个项目,那么您可以使用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

请记住,如果只选择一个或没有值,则会出现类型不匹配错误,您将不得不以某种方式处理此问题。

希望这会有所帮助..