将单位切换添加到 MS Access 表单

Adding a unit toggle to MS Access Form

TL;DR

我正在尝试对输入到数据输入表单的值进行一些计算,然后再将它们保存到 table。


背景

我在 MS Access 中有一个表单,用作将数据输入数据库的前端。它主要是基准与各种对象之间的距离数据。数据库和使用该数据的应用程序都已设置好,所有测量单位都以英尺为单位,但我们的许多数据源都以米为单位。过去,用户必须自己转换数据,然后才能将其输入到表单中。这个额外的步骤会降低工作效率,并增加用户出错的机会。

我想要做的是在我的表单中添加一个圆形按钮,让用户可以在米和英尺之间切换。当它被交换为米时,该记录的所有值在显示在屏幕上之前都被转换为它们的米当量。如果用户更改记录或创建新记录,则表单需要在更新 table 之前将值转换回英尺。 table 中的值始终以英尺为单位非常重要。

我找到了 this article,它描述了如何在表单的记录源之间进行交换。我想我可以设置 2 个查询 - 一个直接从 table 中提取数据,一个执行转换 - 并在用户切换径向按钮时在查询之间交换作为我的记录源。


问题

此设置的问题在于,由于我必须在查询中使用别名来执行转换,因此当径向切换为米时,用户无法输入数据。如果我尝试更新其中一个字段,我只会收到 bing 噪音并且输入会被忽略。 当径向切换为米时,有什么方法可以允许输入吗?正如我上面所说,重要的是 table 中的数据始终以英尺为单位,所以如果用户选择了 'meters' 选项并输入了一个值 500,输入到 table 的值应该是 1640,这是转换为英尺的结果。


样本

这是我的查询的简化示例

英尺查询

SELECT A,B,C AS LEN,D,E
FROM TABLE1

METERS 查询

SELECT A,B,C/0.3048 AS LEN,D,E
FROM TABLE1

只需更改文本框中显示的内容即可。设置文本框的控制源为

=Length*txtConversionFactor

其中 txtConversionFactor 是一个隐藏的文本框,如果您的单位以英尺显示,则其中包含 1,如果以米显示,则为 0.3048。它甚至可以是像这样

绑定到 table 的组合框
MultiplyFeetByToGetOutputUnits    OutputUnits
1                                 ft
0.3048                            m
12                                in
0.000189394                       mile

然后你可以在不改变你的形式的情况下转换成你想要的任何东西。

仅使用此查询:

SELECT A,B,C AS LEN,D,E
FROM TABLE1

在您的表单中,隐藏绑定到 LEN 的文本框。

创建一个新的未绑定文本框,例如 txtLEN。

现在使用这样的代码,其中 SelectMetric 是使用指标值时要标记的复选框:

Private Sub Form_Current()

    Dim Factor As Currency

    If Me!SelectMetric.Value = True Then
        Factor = 0.3048
    Else
        Factor = 1
    End If        
    Me!txtLen.Value = Factor * Me!LEN.Value

End Sub

Private Sub txtLen_AfterUpdate()

    Dim Factor As Currency

    If Me!SelectMetric.Value = True Then
        Factor = 0.3048
    Else
        Factor = 1
    End If        
    Me!Len.Value = Me!txtLEN.Value / Factor

End Sub