将单位切换添加到 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
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。它甚至可以是像这样
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