Access 数据库中的输入掩码
Input mask in Access database
我有一个客户 ID 的字段,其格式应为 C0000000001,其中开头有一个字母,字母后最多有 10 个数字,字母和数字之间有前导零。我希望用户能够输入 C1 并让 table 保存 C0000000001 或 C1234 并让 table 保存 C0000001234。
我希望对 table 中的硬数据进行限制。 table 应包含完整的客户 ID,但我只希望用户在 entering/searching 时必须输入 C 和客户编号。我正在使用 Access 2010。
我相信第一个字符将始终是 C,但无论哪种方式,如果不是,它也只会是一个字母字符。
我明白你在说什么,但大部分数据(数千条记录)将来自以这种方式存储它们的另一个系统。这样做限制了我的误差范围。否则,从其他系统导出的内容需要在导入到数据库之前手动更改,反之亦然。
搜索将仅针对将以 C0000001234 格式保存的现有记录,但我希望用户在输入搜索条件时能够省略前导零。
输入掩码不是解决这个问题的方法。输入掩码强制用户以某种方式输入数据。您需要的是一些 VBA 代码到 运行 在窗体上的 AfterUpdate 事件中。在 table 中无法强制数据进入此模式,从而允许您请求的输入法。
可能有一种更有效的方法来执行此操作,但这样做就可以了。
这个问题,结合您之前的问题,向我表明您正在非常努力地使您的 Access 数据库中的数据结构完全匹配您从中接收批量更新的遗留系统。这可能没有必要,甚至是不可取的。
例如,与其将 CustomerId 维护为 Text(11)
(如在旧系统中),不如将其存储在 Access 数据库中为
- CustomerIdPrefix:
Text(1)
和
- CustomerIdNumber:
Long Integer
或者 Decimal
如果数字部分真的可以超过 2,147,483,647
您在 Access 中的客户 table 还可以包含一个名为 CustomerId 的计算字段
[CustomerIdPrefix] & Right("0000000000" & [CustomerIdNumber], 10)
为您提供一个 'C0000012345' 值以供显示。
对于搜索,您的表单可以有一个文本框作为前缀(默认值:'C')和另一个文本框作为数字部分。然后搜索可以使用
这样的条件
[CustomerIdPrefix] = txtPrefix.Value AND [CustomerIdNumber] = txtNumber.Value
或者,如果用户想在表单(或数据表视图)上创建一个过滤器,那么只在数字部分进行过滤可能就足够了。
如果您需要将信息反馈给遗留系统,您只需导出包含 [CustomerId] 计算字段(并省略 [CustomerIdPrefix] 和 [CustomerIdNumber])的查询就可以了。
我的建议是使用带有 FORMAT 函数的关联查询的表单。
您确实需要说明您希望在何处实施此功能,但我假设您已设置 table 并且您希望能够 enter/search 来自形式。
我将为输入创建一个表单 frmAdd
。对于输入表单,我创建了一个查询,当按下表单上的按钮时,该查询将 运行 。将两个文本框 newID
和 newOther
添加到无限制但用户可以用来输入数据的表单中。然后查询将提取该数据并以更改后的格式将其附加到您的 table。这是该查询的 SQL:
INSERT INTO Customers ( [Customer ID], [Other Field] )
SELECT Left([Forms]![frmAdd]![newID].[value],1)
& Format(Right([Forms]![frmAdd]![newID].[value],Len([Forms]![frmAdd]![newID].[value])-1),"0000000000")
AS Expr1, Forms![frmAdd]!newOther AS Expr2
FROM Customers;
我不确定您要查找的确切搜索功能是什么,但此查询会提取与 frmSearch
的记录数据相匹配的文本框 search
,其中包含格式 C### 或输入的任何格式:
SELECT Left([Customers].[Customer ID],1) & Replace(LTrim(Replace(Right([Customers].[Customer ID],9),'0',' ')),' ','0')
AS Expr1, Customers.[Other Field]
FROM Customers
WHERE (((Customers.[Customer ID])=Left([Forms]![frmSearch]![search].[value],1)
& Format(Right([Forms]![frmSearch]![search].[value],Len([Forms]![frmSearch]![search].[value])-1),"0000000000")));
应用输入掩码只是确保您的数据正确的一种方法。如果您觉得需要使用一个,请转到设计视图中的 table,然后单击客户 ID 字段的数据类型框。在 Field Properties -> General 下找到 Input Mask 并点击它。然后点击转到工具栏 -> 设计选项卡 -> 生成器。这将引导您完成它。
我有一个客户 ID 的字段,其格式应为 C0000000001,其中开头有一个字母,字母后最多有 10 个数字,字母和数字之间有前导零。我希望用户能够输入 C1 并让 table 保存 C0000000001 或 C1234 并让 table 保存 C0000001234。
我希望对 table 中的硬数据进行限制。 table 应包含完整的客户 ID,但我只希望用户在 entering/searching 时必须输入 C 和客户编号。我正在使用 Access 2010。
我相信第一个字符将始终是 C,但无论哪种方式,如果不是,它也只会是一个字母字符。
我明白你在说什么,但大部分数据(数千条记录)将来自以这种方式存储它们的另一个系统。这样做限制了我的误差范围。否则,从其他系统导出的内容需要在导入到数据库之前手动更改,反之亦然。
搜索将仅针对将以 C0000001234 格式保存的现有记录,但我希望用户在输入搜索条件时能够省略前导零。
输入掩码不是解决这个问题的方法。输入掩码强制用户以某种方式输入数据。您需要的是一些 VBA 代码到 运行 在窗体上的 AfterUpdate 事件中。在 table 中无法强制数据进入此模式,从而允许您请求的输入法。
可能有一种更有效的方法来执行此操作,但这样做就可以了。
这个问题,结合您之前的问题
例如,与其将 CustomerId 维护为 Text(11)
(如在旧系统中),不如将其存储在 Access 数据库中为
- CustomerIdPrefix:
Text(1)
和 - CustomerIdNumber:
Long Integer
或者Decimal
如果数字部分真的可以超过 2,147,483,647
您在 Access 中的客户 table 还可以包含一个名为 CustomerId 的计算字段
[CustomerIdPrefix] & Right("0000000000" & [CustomerIdNumber], 10)
为您提供一个 'C0000012345' 值以供显示。
对于搜索,您的表单可以有一个文本框作为前缀(默认值:'C')和另一个文本框作为数字部分。然后搜索可以使用
这样的条件[CustomerIdPrefix] = txtPrefix.Value AND [CustomerIdNumber] = txtNumber.Value
或者,如果用户想在表单(或数据表视图)上创建一个过滤器,那么只在数字部分进行过滤可能就足够了。
如果您需要将信息反馈给遗留系统,您只需导出包含 [CustomerId] 计算字段(并省略 [CustomerIdPrefix] 和 [CustomerIdNumber])的查询就可以了。
我的建议是使用带有 FORMAT 函数的关联查询的表单。
您确实需要说明您希望在何处实施此功能,但我假设您已设置 table 并且您希望能够 enter/search 来自形式。
我将为输入创建一个表单 frmAdd
。对于输入表单,我创建了一个查询,当按下表单上的按钮时,该查询将 运行 。将两个文本框 newID
和 newOther
添加到无限制但用户可以用来输入数据的表单中。然后查询将提取该数据并以更改后的格式将其附加到您的 table。这是该查询的 SQL:
INSERT INTO Customers ( [Customer ID], [Other Field] )
SELECT Left([Forms]![frmAdd]![newID].[value],1)
& Format(Right([Forms]![frmAdd]![newID].[value],Len([Forms]![frmAdd]![newID].[value])-1),"0000000000")
AS Expr1, Forms![frmAdd]!newOther AS Expr2
FROM Customers;
我不确定您要查找的确切搜索功能是什么,但此查询会提取与 frmSearch
的记录数据相匹配的文本框 search
,其中包含格式 C### 或输入的任何格式:
SELECT Left([Customers].[Customer ID],1) & Replace(LTrim(Replace(Right([Customers].[Customer ID],9),'0',' ')),' ','0')
AS Expr1, Customers.[Other Field]
FROM Customers
WHERE (((Customers.[Customer ID])=Left([Forms]![frmSearch]![search].[value],1)
& Format(Right([Forms]![frmSearch]![search].[value],Len([Forms]![frmSearch]![search].[value])-1),"0000000000")));
应用输入掩码只是确保您的数据正确的一种方法。如果您觉得需要使用一个,请转到设计视图中的 table,然后单击客户 ID 字段的数据类型框。在 Field Properties -> General 下找到 Input Mask 并点击它。然后点击转到工具栏 -> 设计选项卡 -> 生成器。这将引导您完成它。