Access 2007
这是一个简化的方案。它几乎与我的实际用例相同,只是更容易解释。我的电影和流派之间有多对多关系,表结构如下。
表:电影 id autonumber 名称文字
表:类型 id autonumber 名称文字
表:movie_genres movie_id号码 genre_id号
我想要一个允许我列出给定电影的所有类型的表单。但也允许我创建新类型,而无需打开单独的表单。类似于免费标记在Drupal或Wordpress等cms网站中的工作方式。
我已经成功创建了一个表单,允许我使用指向movie_genres表的子表单和指向流派表的组合框来显示所有标签。此表单设置还允许我选择现有值作为新类型。然而,它不允许我创造新的流派。
如果我输入的值不存在,我会收到警告"您输入的文字不是列表中的项目。"
如果我尝试将组合框更改为"限制列表:否"我收到警告:"第一个可见列...不等于绑定列。"如果我将第一个可见列设置为绑定列,则组合框只显示数字而不是名称,这很愚蠢,因为信息存在。
此简化案例的表格如下:
我还可以使用指向流派名称的常规文本框创建指向movie_genres和genres表的子表单。这允许我创建新值,但它不允许我从现有值中进行选择。没有这张照片。
在此表单上创建一个组合框与第二个表单相同。
如何创建支持创建和列出现有流派的电影表单项?
答案 0 :(得分:1)
您可以使用“NotInList”事件轻松地将新值添加到流派列表中。保留Limit To List: Yes
并使用与以下代码类似的代码:
Private Sub GenreName_NotInList(NewData As String, Response As Integer)
' Prompt user to verify they wish to add new value.
If MsgBox("Genre '" & NewData & "' is not in list. Add it?", _
vbOKCancel) = vbOK Then
' Set Response argument to indicate that data
' is being added.
Response = acDataErrAdded
' Add string in NewData argument to row source.
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Genres (GenreName) SELECT '" & NewData & "';"
DoCmd.SetWarnings True
Else
' If user chooses Cancel, suppress error message
' and undo changes.
Response = acDataErrContinue
Me.GenreName.Undo
End If
End Sub