3

我在 Access 2007 中创建了一个小型数据库,它由一个表和两个表单组成,一个用于输入数据,一个用于检索数据。

我的问题是:在我的输入表单上,我有一个包含三个单选按钮的组框。被问到的问题是元素是传感器吗?
这些按钮代表YesNoDon't Know

在数据库中,我有一个名为 Sensor 的列来保存用户选择的值,但由于单选按钮返回值1表示yes2表示no3表示don't know,它会生成一个报告或查询对用户来说很困难。

在这一点上,我正在编写带有嵌套 iif 的大量 SQL 语句,以按照我想要的方式返回数据。

有没有办法以我希望看到的方式(是,不,不知道)用数据填充表格,而不是用 1 的 2 或 3 填充它?顺便说一句,这是一个绑定的形式,我希望我能做到不受约束,但我现在不能回去了。

4

3 回答 3

2

由于单选按钮返回值 1 表示是,2 表示否,或 3 表示不知道,因此生成对用户有意义的报告或查询非常困难。

将这 3 对作为行存储在Sensor_Values表中:

sval descriptor
1    yes
2    no
3    don't know

然后,您可以将该表加入到包含存储Sensor数字的表中。

SELECT yt.Sensor, sv.descriptor
FROM
    YourTable AS yt
    INNER JOIN Sensor_Values AS sv
    ON yt.Sensor = sv.sval;

如果您反对创建和加入查找表,则可以Switch()在查询中使用表达式将数值Sensor转换为其文本形式。

SELECT
    Switch(
        Sensor = 1, "yes",
        Sensor = 2, "no",
        Sensor = 3, "don't know"
    ) AS sensor_text
FROM YourTable;

Switch()方法可以工作,但与查找表方法相比,维护起来更具挑战性。

我的目的是向您展示使用选项组值作为数字的相当简单的方法,而不是“以我希望看到的方式(是,不,不知道)用数据填充表格,而不是用 1 填充它2 或 3 "

作为一般规则,您最好使用访问控制,因为它们被设计为使用。只要你有一个令人信服的理由就打破这条规则......但是打破规则需要你付出额外的努力......比如更多的VBA代码。我建议的方法不需要任何 VBA。

于 2012-09-19T15:53:32.520 回答
2

我建议不要使用单选按钮,而是选择组合框。您将能够直接在组合框中为结果使用字符串值。

现在,如果您对使用单选按钮一无所知,请尝试以下操作:

在包含文本的表格中添加一个新字段。将此绑定到表单上的隐藏文本框。然后,将一个更新前事件(或更新后,取决于您正在做什么)添加到无线电组。添加类似于以下的代码:

Sub RadioGroup_BeforeUpdate(cancel As Integer)
    Select Case Me.RadioGroup.Value
        case 1
            Me.hiddenTextField.value = "Yes"
        case 2
            Me.hiddenTextField.value = "No"
        case else
            Me.hiddenTextField.value = "Don't Know"
    End Select
End Sub

现在,当您保存记录时,人类可读的值将在您添加的新字段中可用。

于 2012-09-18T20:44:11.240 回答
1

您可以Select Case在创建选择字符串时使用 a,而不是将iif' 嵌套在 SQL 中。

Select Case Me.rdoSensor
    Case 1
        sSQL=sSQL & " AND Sensor='Yes'"
    Case 2
        sSQL=sSQL & " AND Sensor='No'"
    Case 3
        sSQL=sSQL & " AND Sensor='Don''t know'"
End Select
于 2012-09-19T15:30:46.883 回答