如何将Access 2016中的多个复选框连接到SQL Server中的列?

问题描述 投票:0回答:1

我在SQL Server 2017中的数据库上有一个列,可以容纳5个不同的值(比方说A、B、C、D和E)。 在SQL Server中,如果选择了两个或更多,它们会被一个空格隔开。

我正在Access 2016中创建一个表单,我需要连接到这一列内的每个选项,这样如果选择了与不同值相关联的任何复选框,它将在表单上显示选中的框,并且还将该值放入服务器上的数据库中。

例子:A - uncheckedB - checkedC - uncheckedD - uncheckedE - checked

该栏目显示。B E

如果有任何帮助,将非常感谢。

编辑:我创建了5个与A、B、C、D、E相关联的新列,并将数据酌情迁移到每个列中。

我创建了与A、B、C、D、E相关联的5个新列,并在适当的地方将数据迁移到每个列中。 因此,有了这个,我仍然需要一个Access复选框,如果数据在其各自的列中有字母,当在Access中选中时,输入字母。

sql sql-server ms-access access-vba ms-access-2016
1个回答
1
投票

正如评论中提到的,这是一个糟糕的想法。然而,如果没有其他方法,可以用一点VBA来完成。

首先,你需要两个过程--一个是从这个字段中获取数据并设置复选框,另一个是获取复选框的状态并写回这个字段。

 Sub sSetCheckBox()
    Me!chkA = Nz(InStr(Me!CheckData, "A"))
    Me!chkB = Nz(InStr(Me!CheckData, "B"))
    Me!chkC = Nz(InStr(Me!CheckData, "C"))
    Me!chkD = Nz(InStr(Me!CheckData, "D"))
    Me!chkE = Nz(InStr(Me!CheckData, "E"))
End Sub

Sub sGetCheckBox()
    Me!CheckData = ""
    If Nz(Me!chkA) Then Me!CheckData = Me!CheckData & "A"
    If Nz(Me!chkB) Then Me!CheckData = Me!CheckData & "B"
    If Nz(Me!chkC) Then Me!CheckData = Me!CheckData & "C"
    If Nz(Me!chkD) Then Me!CheckData = Me!CheckData & "D"
    If Nz(Me!chkE) Then Me!CheckData = Me!CheckData & "E"
End Sub

然后,你需要在表单的Current事件中调用第一个过程,以使复选框在表单打开和用户浏览记录时正确显示。

Private Sub Form_Current()
    Call sSetCheckBox
End Sub

然后当用户点击复选框时,你需要使用第二个过程。

Private Sub chkA_Click()
    Call sGetCheckBox
End Sub

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.