Forms 访问表单:如何映射复选框的值
我有一张甲骨文的桌子。该表有一个包含两个可能值的整数字段:null或1。对于我们的应用程序,null表示false,1表示true 我正在access 2010中为该表创建一个表单。我希望该字段表示为复选框(为1启用,为null禁用) 如果我直接从字段创建复选框,则空值显示为矩形,1正确显示(如选中)。但是,如果我更改复选框的值(矩形->选中,或选中->未选中),并将数据保存到数据库中,则选中的值保存为-1(而不是1),未选中的值保存为0(而不是null) 如果我根据公式创建复选框:Forms 访问表单:如何映射复选框的值,forms,oracle,ms-access,checkbox,mapping,Forms,Oracle,Ms Access,Checkbox,Mapping,我有一张甲骨文的桌子。该表有一个包含两个可能值的整数字段:null或1。对于我们的应用程序,null表示false,1表示true 我正在access 2010中为该表创建一个表单。我希望该字段表示为复选框(为1启用,为null禁用) 如果我直接从字段创建复选框,则空值显示为矩形,1正确显示(如选中)。但是,如果我更改复选框的值(矩形->选中,或选中->未选中),并将数据保存到数据库中,则选中的值保存为-1(而不是1),未选中的值保存为0(而不是null) 如果我根据公式创建复选框: Switc
Switch(my_field='1','-1',my_field Is Null,'0')
然后正确显示值,但我无法更改复选框状态(选中或取消选中)
我认为应该有一种简单的方法来进行映射,因为这是一种常见的情况,但我找不到方法来进行映射。解决问题的一种方法是在表单上创建一个隐藏的文本框控件(
.Visible
=No
)。对于这个示例,我将其称为txtMyIntAsBoolean
。它绑定到表中可以包含Null
/1
值的字段
您的(可见)复选框控件应解除绑定。它是。值
将是真
或假
(真布尔值),取决于是否选中它
现在,您只需要在表单后面添加两行VBA代码。在窗体的当前事件处理程序上创建一个,并在更新后为复选框创建一个事件处理程序,代码如下:
选项比较数据库
选项显式
私有子chkMyCheckbox_AfterUpdate()
Me.txtMyIntAsBoolean.Value=IIf(Me.chkMyCheckbox.Value,1,Null)
端接头
私有子表单_当前()
Me.chkMyCheckbox.Value=(不为null(Me.txtMyIntAsBoolean))
端接头
当您移动到新记录时,“当前<代码>事件”更新复选框的值,“更新后<代码>事件”根据复选框的状态将隐藏文本框的值设置为适当的值。复选框
只能表示真
或假
如果必须使用复选框,则必须取消绑定,并且仅当默认视图
设置为单一表单
时,该复选框才有效。否则,我建议使用组合框
您将在窗体的当前事件中更新控件的值,并在复选框的更新后更新表中字段的值,如下所示:
Private Sub Form_Current()
Select Case MyField
Case 1
MyCheckbox = True
Case Null
MyCheckbox = False
End Select
End Sub
Private Sub MyCheckbox_AfterUpdate()
Select Case MyCheckbox
Case True
MyField = 1
Case False
MyField = Null
End Select
End Sub
更改复选框返回的存储值并不容易
如果使用表单,workarround将创建一个未绑定复选框并处理AfterUpdate事件。
在这种情况下,可以使用正确的值更新隐藏的有界控件。
在form_Current event中,您可以从隐藏控件更新复选框。非常有效,谢谢。我认为MS应该(在未来的版本中)添加一种以图形方式进行映射的方法,而不需要添加代码/过程。类似于组合框中的映射(或者更简单,因为组合框中的映射有点棘手)。