2016-04-27 84 views
0

我有一個表單用於收集將在Access 2016中插入到數據庫表中的信息。我的表單有一個多值組合框(稱爲cmbContacts)從聯繫人表(ID和名稱)中提取值。用戶可以從組合框中選擇0個或更多聯繫人。當用戶單擊提交按鈕時,button_click事件觸發VBA代碼來格式化信息並將其插入表中。從訪問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循環不運行。我不知道爲什麼它沒有註冊選定的項目
+0

我不太清楚你爲什麼要用Max。您不需要SQL語句中的Where部分。 SQL =「INSERT INTO Breweries([Contact Names]。[Value])VALUES(」+ itm +「)」。 你爲什麼試着用txt作爲後綴指向文本框的combobox? – INOPIAE

+0

我確實需要最大值 - 它給了我最近添加到啤酒廠表中的條目的ID。然後,我將值添加到具有該ID的實體的「聯繫人姓名」字段中。 我可以更新我的代碼,以便_prefix_更好地與對象對齊 – estoner

+0

MSA16中的多選組合框必須是新的。或者你在使用Listbox嗎? –

回答

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 

請記住,這將有一個類型不匹配錯誤,如果只有一個,或者沒有選擇的值,你將不得不以某種方式處理這個問題。

希望這會有所幫助..