带有LimitToList的Combobox设置为false,带有非绑定字段

时间:2015-10-12 02:53:24

标签: ms-access ms-access-2013

我有一个products表和一个具有多对多关系的tags表。我还有一个数据透视表,用于存储产品ID和标签ID。

我希望能够在组合框中显示标记文本但是存储id。这本身就很简单,因为我可以调整id的列宽,但是,我试图将LimitToList设置为No,这样我就可以实现一些VBA来过滤列表了我输入组合框,但只有当第一列是绑定列时才会出现这种情况,这意味着标记ID出现在组合框中而不是文本中。

如何在组合框中显示标记文本并允许' LimitToList'是假的?

3 个答案:

答案 0 :(得分:0)

LimitToList保留在Yes上,然后使用组合框的 NotInList 事件。
E.g。

Private Sub cboTag_NotInList(NewData As String, Response As Integer)

    Dim RS As Recordset

    If MsgBox("Do you want to add '" & NewData & "' as new Tag?", vbYesNo + vbQuestion) _ 
       = vbYes Then
        ' Add the new tag
        Set RS = CurrentDb.OpenRecordset("tbTags")
        With RS
            .AddNew
            !Tag_Text = NewData
            .Update
            .Close
        End With
        Response = acDataErrAdded
    Else
        Response = acDataErrDisplay
        ' Or a user defined MsgBox and acDataErrContinue
    End If

End Sub

答案 1 :(得分:0)

再次(叹气)我误解了你的问题。 :(

要在用户键入标记的一部分时过滤组合框,您可以使用Change事件。这适用于LimitToList = Yes

Private Sub cboTag_Change()

    Me.cboTag.RowSource = _
       "SELECT Tag_ID, Tag_Text FROM tbTags WHERE Tag_Text LIKE '*" & Me.cboTag.Text & "*'"

    ' With the instant filtering, it is more convenient for the user 
    ' to always see the filtered dropdown
    Me.cboTag.Dropdown

End Sub

当然,在某些时候用户必须从列表中选择一个标签。否则将无法存储在该字段中的ID 或者,如果您希望他能够添加新标签,请使用其他答案中的代码。这两个事件都是一起写的。

答案 2 :(得分:0)

搜索即用型技术描述非常好here,包括在键入几个字符后从打开的下拉组合框中自动选择项目。