我有一个客户ID的字段,格式应为C0000000001,其中开头有一个字母,在字母和数字之间带有前导零的字母后最多10个数字。我希望用户能够放入C1并使表保存C0000000001或C1234并使表保存C0000001234。
我希望限制在表格中的硬数据上。该表应包含完整的客户ID,但我只希望用户在输入/搜索客户时必须输入C和客户编号。我正在使用Access 2010。
我相信第一个角色永远都是C,但不管怎样,如果不是,那就只有一个字母字符。
我明白你在说什么,但大多数数据(数千条记录)将来自另一个以这种方式存储它们的系统。这样做可以限制我的误差范围。否则,在导入数据库之前需要手动更改其他系统的导出,反之亦然。
搜索仅限于将以C0000001234格式保存的现有记录,但我希望用户在输入搜索条件时能够省略前导零。
答案 0 :(得分:1)
此问题与您之前的问题here相结合,向我建议您正在努力让Access数据库中的数据结构完全匹配您的遗留系统收到批量更新。这可能不是必要的,甚至是不可取的。
例如,不要将CustomerId维护为Text(11)
(如在旧系统中),而是将其存储在Access数据库中
Text(1)
和Long Integer
或Decimal
如果数字部分真的超过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
创建一个表单。对于输入表单,我创建了一个在按下表单上的按钮时运行的查询。将两个文本框newID
和newOther
添加到无条件但用户可用于输入数据的表单中。然后,查询将提取该数据并以更改的格式将其附加到您的表中。这是该查询的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代码。表中没有办法强制数据进入这种模式,允许你请求的输入法。
可能有一种更有效的方法可以做到这一点,但这可以胜任。