我在oracle中有一张表。该表有一个带有2个可能值的整数字段:null或1.对于我们的应用程序,null表示false,1表示true。
我正在为该表创建访问2010中的表单。我希望该字段表示为一个复选框(启用1,禁用null)。
如果我直接从字段创建复选框,则空值显示为矩形,并且正确显示1(如选中)。但是,如果我更改复选框的值(矩形 - >选中,或选中 - >未选中),并将数据保存到数据库,则选中的值将保存为-1(而不是1),并且未标记值保存为0(而不是null)。
如果我从公式创建复选框:
Switch(my_field='1','-1',my_field Is Null,'0')
然后值正确显示,但我无法更改复选框状态(检查或取消确认)。
我认为应该有一种简单的方法来进行映射,因为它是一种常见的情况,但我找不到这样做的方法。
答案 0 :(得分:1)
解决您的问题的一种方法是在表单上创建隐藏的TextBox控件(.Visible
= No
)。对于此示例,我将其称为txtMyIntAsBoolean
。它绑定到表格中可包含Null
/ 1
值的字段。
您的(可见)复选框控件应该是未绑定的。它的.Value
将是True
或False
(true布尔值),具体取决于是否已选中。
现在您只需要在表单后面添加两行VBA代码。为Form创建一个On Current
事件处理程序,并为Checkbox创建一个After Update
事件处理程序,其代码类似于:
Option Compare Database
Option Explicit
Private Sub chkMyCheckbox_AfterUpdate()
Me.txtMyIntAsBoolean.Value = IIf(Me.chkMyCheckbox.Value, 1, Null)
End Sub
Private Sub Form_Current()
Me.chkMyCheckbox.Value = (Not IsNull(Me.txtMyIntAsBoolean))
End Sub
当您移动到新记录时,On Current
事件会更新复选框的值,而After Update
事件会根据状态将{隐藏文本框的值 - 设置为适当的值。复选框。
答案 1 :(得分:0)
checkbox
只能表示true
或false
。
如果您必须使用复选框,则必须将其取消绑定,并且仅当Default View
设置为Single Form
时才有效。否则,我建议使用组合框。
您将在表单的On_Current
事件中更新控件的值,并在复选框的After_Update
事件中更新表中字段的值,如下所示:
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
答案 2 :(得分:0)
更改复选框返回的存储值并不容易。
如果使用表单,则workarround是创建一个未绑定的复选框并处理AfterUpdate事件。 在那种情况下,您可以使用正确的值更新隐藏的有界控件。 在form_Current事件中,您可以从隐藏控件中更新复选框。