我在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中选中时,输入字母。
正如评论中提到的,这是一个糟糕的想法。然而,如果没有其他方法,可以用一点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
谢谢