访问表单:如何映射复选框的值

时间:2014-01-27 09:42:57

标签: forms oracle ms-access checkbox mapping

我在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')

然后值正确显示,但我无法更改复选框状态(检查或取消确认)。

我认为应该有一种简单的方法来进行映射,因为它是一种常见的情况,但我找不到这样做的方法。

3 个答案:

答案 0 :(得分:1)

解决您的问题的一种方法是在表单上创建隐藏的TextBox控件(.Visible = No)。对于此示例,我将其称为txtMyIntAsBoolean。它绑定到表格中可包含Null / 1值的字段。

您的(可见)复选框控件应该是未绑定的。它的.Value将是TrueFalse(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只能表示truefalse

如果您必须使用复选框,则必须将其取消绑定,并且仅当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事件中,您可以从隐藏控件中更新复选框。