TL; DR
我尝试对输入到数据输入表单的值执行一些计算,然后再将它们保存到表格中。
背景
我在MS Access中有一个表单,用作将数据输入数据库的前端。它主要是基准面和各种物体之间的距离数据。数据库和使用这些数据的应用程序都已设置好,所有测量都是以英尺为单位,但我们的许多数据来源都以米为单位。过去,用户必须在将数据输入表单之前自行转换数据。这一额外步骤会降低生产力,并增加用户错误的可能性。
我想要做的是在我的表单中添加一个径向按钮,让用户可以在米和英尺之间切换。当它被交换到米时,该记录的所有值都会在显示在屏幕上之前转换为它们的等效表。如果用户更改记录或创建新记录,表单将需要在更新表之前将值转换回英尺。表格中的值始终保持在英尺范围内非常重要。
我找到了this article,它描述了如何在表单的记录源之间进行切换。我想我可以设置2个查询 - 一个直接从表中提取数据,一个执行转换 - 并在用户切换径向按钮时在查询之间切换作为我的记录源。
问题
此设置的问题在于,由于我必须在查询中使用别名来执行转换,因此当径向切换为米时,用户无法输入数据。如果我尝试更新其中一个字段,我只会得到一个bing噪声并忽略输入。 当径向切换到米时,有没有办法允许输入?正如我上面所说,表中的数据总是以英尺为单位很重要,所以如果用户有&#39 ;米'如果选择了该选项并输入了500
之类的值,则输入到表格中的值应为1640
,这是转换为英尺的结果。
示例
这是我查询的简单示例
FEET查询
SELECT A,B,C AS LEN,D,E
FROM TABLE1
METERS查询
SELECT A,B,C/0.3048 AS LEN,D,E
FROM TABLE1
答案 0 :(得分:2)
仅使用此查询:
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
答案 1 :(得分:0)
只需更改文本框中显示的内容即可。设置文本框以具有
的控制源txtConversionFactor
1
是隐藏文本框,如果您的单位以英尺显示,则其中包含MultiplyFeetByToGetOutputUnits OutputUnits
1 ft
0.3048 m
12 in
0.000189394 mile
,如果要以米为单位显示,则为0.3048。它甚至可能是一个绑定到这样的表的组合框
use strict;
use warnings;
use Win32::GUI ();
my $file = Win32::GUI::GetOpenFileName(
-filemustexist => 1,
);
if (defined $file) {
print "Selected file: $file\n";
} else {
print "Canceled\n";
}
然后,您可以在不更改表单的情况下转换为您想要的任何内容。