【问题标题】:Access form: How to map values for a checkbox访问表单:如何映射复选框的值
【发布时间】:2014-01-27 09:42:56
【问题描述】:

我在 oracle 中有一张桌子。该表有一个整数字段,有 2 个可能的值:null 或 1。对于我们的应用程序,null 表示 false,1 表示 true。

我正在为该表在 access 2010 中创建一个表单。我希望该字段表示为一个复选框(启用为 1,禁用为 null)。

如果我直接从该字段创建复选框,则空值显示为矩形,并且正确显示 1(已选中)。但是,如果我更改复选框的值(矩形 -> 选中,或选中 -> 未选中),并将数据保存到数据库,则选中的值将保存为 -1(而不是 1),而未选中的值为保存为 0(而不是 null)。

如果我从公式创建复选框:

Switch(my_field='1','-1',my_field Is Null,'0')

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

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

【问题讨论】:

    标签: forms oracle ms-access checkbox mapping


    【解决方案1】:

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

    您的(可见)复选框控件应该是未绑定的。 .Value 将是 TrueFalse(真正的布尔值),具体取决于是否选中。

    现在您只需要表单后面的两行 VBA 代码。为表单创建一个On Current 事件处理程序,为复选框创建一个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 事件在您移动到新记录时更新 Checkbox 的值,After Update 事件根据 Checkbox 的状态将隐藏文本框的值设置为适当的值。

    【讨论】:

    • 完美运行,谢谢。我认为 MS 应该(在未来的版本中)添加一种以图形方式进行映射的方法,而无需添加代码/程序。类似于组合框中的映射(甚至更简单,因为组合框中的映射有点棘手)。
    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

      复选框返回的存储值不容易改变。

      如果您使用表单,解决方法是创建一个未绑定的复选框并处理 AfterUpdate 事件。 在这种情况下,您可以使用正确的值更新隐藏的有界控件。 在 form_Current 事件中,您可以从隐藏控件中更新复选框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 2013-06-14
        • 1970-01-01
        • 2019-03-12
        • 2020-12-19
        • 2017-10-19
        • 1970-01-01
        相关资源
        最近更新 更多