将单元切换添加到MS Access Form

时间:2016-07-06 17:18:42

标签: vba ms-access ms-access-2003

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

2 个答案:

答案 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";
}

然后,您可以在不更改表单的情况下转换为您想要的任何内容。