我在Access 2007中创建了一个小型数据库,它包含一个表和两个表单,一个用于输入数据,另一个用于检索数据。
我的问题是:在我的输入表单上,我有一个带有三个单选按钮的组合框。被问到的问题是元素是传感器吗?
按钮代表是,否和不知道。
在数据库中,我有一个名为Sensor的列来保存用户选择的值,但由于单选按钮为是返回 1 的值, 2 no , 3 不知道,它会生成对用户有意义的报告或查询非常困难。
此时我正在编写带有嵌套iif的巨大SQL语句,以便按照我想要的方式返回数据。
有没有办法用我希望看到的方式填充数据表(是的,不,不知道),而不是用1的2或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