在Access数据库中输入掩码

时间:2015-02-02 16:41:39

标签: ms-access ms-access-2010

我有一个客户ID的字段,格式应为C0000000001,其中开头有一个字母,在字母和数字之间带有前导零的字母后最多10个数字。我希望用户能够放入C1并使表保存C0000000001或C1234并使表保存C0000001234。

我希望限制在表格中的硬数据上。该表应包含完整的客户ID,但我只希望用户在输入/搜索客户时必须输入C和客户编号。我正在使用Access 2010。

我相信第一个角色永远都是C,但不管怎样,如果不是,那就只有一个字母字符。

我明白你在说什么,但大多数数据(数千条记录)将来自另一个以这种方式存储它们的系统。这样做可以限制我的误差范围。否则,在导入数据库之前需要手动更改其他系统的导出,反之亦然。

搜索仅限于将以C0000001234格式保存的现有记录,但我希望用户在输入搜索条件时能够省略前导零。

3 个答案:

答案 0 :(得分:1)

此问题与您之前的问题here相结合,向我建议您正在努力让Access数据库中的数据结构完全匹配您的遗留系统收到批量更新。这可能不是必要的,甚至是不可取的。

例如,不要将CustomerId维护为Text(11)(如在旧系统中),而是将其存储在Access数据库中

  • CustomerIdPrefix:Text(1)
  • CustomerIdNumber:Long IntegerDecimal如果数字部分真的超过2,147,483,647

Access中的Customers表还可以包含名为CustomerId的计算字段

[CustomerIdPrefix] & Right("0000000000" & [CustomerIdNumber], 10)

为您提供一个'C0000012345'值用于显示目的。

对于搜索,您的表单可以有一个前缀文本框(默认值:'C')和数字部分的另一个文本框。然后搜索可以使用类似

的条件
[CustomerIdPrefix] = txtPrefix.Value AND [CustomerIdNumber] = txtNumber.Value

或者,如果用户想要在表单(或数据表视图)上创建过滤器,那么仅过滤数字部分就足够了。

如果您需要将信息反馈给旧系统,您只需导出包含[CustomerId]计算字段的查询(并省略[CustomerIdPrefix]和[CustomerIdNumber]),您就可以了。

答案 1 :(得分:0)

我的建议是使用FORMAT函数使用带有相关查询的表单。

你需要澄清你想要实现的地方,但我会假设你已经设置了一个表,并且你希望能够从表单中输入/搜索数据。

我将为输入frmAdd创建一个表单。对于输入表单,我创建了一个在按下表单上的按钮时运行的查询。将两个文本框newIDnewOther添加到无条件但用户可用于输入数据的表单中。然后,查询将提取该数据并以更改的格式将其附加到您的表中。这是该查询的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")));

应用输入掩码只是确保数据正确的一种方法。如果您觉得需要使用一个,请转到“设计视图”中的表格,然后单击“客户ID”字段的“数据类型”框。在字段属性下查找输入掩码 - >一般并单击它。然后点击进入工具栏 - >设计标签 - >生成器。这将引导您完成它。

答案 2 :(得分:-1)

输入掩码不是答案。输入掩码强制用户以某种方式输入数据。您需要的是在表单上的AfterUpdate事件中运行的一些VBA代码。表中没有办法强制数据进入这种模式,允许你请求的输入法。

可能有一种更有效的方法可以做到这一点,但这可以胜任。

http://pineboxsolutions.com/access/customeriddemo.accdb