用连接表替换多值字段

时间:2014-08-13 17:45:04

标签: vba ms-access access-vba

由于我为后端转换为SQL Server,我从多值字段继续前进。不幸的是,我无法弄清楚如何更换它。

我所做的是在我的"机会"之间建立了多对多的关系。和"目的"使用连接表的表(每个表一对多)。这部分很容易。

我不明白的是如何创建一个下拉列表框(带复选框以选择选项)。

我发现在线资源指出我需要使用VBA的想法,但还没有找到任何实际的例子。是否有人熟悉如何做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:1)

出于同样的原因,我必须这样做;转移到SQL Server后端。我的解决方案保留了复选框功能,但在下拉列表中没有这些功能。如果您不想在主表单上放置一堆框,可以将复选框放在子表单中(看起来像下拉列表?)。

对于每个复选框,您要测试相关表中的记录是否存在,如果在选中该复选框时没有,则添加它,如果未选中该复选则反之。必须取消绑定复选框才能使其生效。

这是添加/删除代码。它进入"更新后"事件:

Private Sub cb_1_AfterUpdate()

If Me.cb_1 = True Then
    If DCount("Parent_ID", "Checkbox_records", "Parent_ID = " & Me.P_ID & "and Checked_box_num = 1") = 0 Then
        strSQL = "INSERT INTO Checkbox_records (Parent_ID, Checked_box_num) VALUES (" & Me.P_ID & "," & "1)"
        CurrentDb.Execute strSQL, dbFailOnError
    End If
End If

If Me.cb_1 = False Then
    If DCount("Parent_ID", "Checkbox_records", "Parent_ID = " & Me.P_ID & "and Checked_box_num = 1") > 0 Then
        strSQL = "DELETE FROM Checkbox_records WHERE Parent_ID = " & Me.P_ID & " and Checked_box_num = 1"
        CurrentDb.Execute strSQL, dbFailOnError
    End If
End If

End Sub

未绑定框的问题在于切换记录时它们不会发生变化。因此,您必须设置框以反映更改记录时的数据状态,您可以在表格" On Current"事件:

Private Sub Form_Current()

If DCount("Parent_ID", "Checkbox_records", "Parent_ID = " & Me.P_ID & "and Checked_box_num = 1") > 0 Then
    Me.cb_1 = True
Else
    Me.cb_1 = False
End If

End Sub

我不喜欢这个解决方案的是你必须复制每个盒子的代码,但它运行顺畅,所以它适合居住。