如何将单选按钮的值从1,2,3等更改为文本值?

时间:2012-09-18 16:56:52

标签: vba ms-access access-vba

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

我的问题是:在我的输入表单上,我有一个带有三个单选按钮的组合框。被问到的问题是元素是传感器吗?
按钮代表不知道

在数据库中,我有一个名为Sensor的列来保存用户选择的值,但由于单选按钮为返回 1 的值, 2 no 3 不知道,它会生成对用户有意义的报告或查询非常困难。

此时我正在编写带有嵌套iif的巨大SQL语句,以便按照我想要的方式返回数据。

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

3 个答案:

答案 0 :(得分: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的

填充它

作为一般规则,您最好使用Access控件,因为它们的设计目的是使用它们。每当你有一个令人信服的理由时打破这个规则......但是违反规则需要你做出额外的努力......比如更多的VBA代码。我建议的方法不需要任何VBA。

答案 1 :(得分:1)

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

现在,如果您已经开始使用单选按钮,请尝试以下操作:

在包含文字的表格中添加一个新字段。将其绑定到表单上的隐藏文本框。 然后,将一个BeforeUpdate事件(或AfterUpdate,具体取决于您正在做的事情)添加到无线电组。添加类似于以下内容的代码:

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

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

答案 2 :(得分:1)

您可以在创建选择字符串时使用Select Case,而不是将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