我有一些需要用户输入的组合框。在Access 2000中,我通过ODBC链接到我们的ERP数据库(FoxPro)。所以,我根本无法修改表结构。无论出于何种原因,很多领域都有前导零。我在组合框中将 限制列表 设置为 是 。
组合框示例:
如果用户不必输入前导零,我希望如此。但是,如果用户在哪里输入47009,他们会收到错误:
The text you entered isn't an item in the list.
字段是文本,我的行源看起来像:
SELECT recid, recnum FROM receiver ORDER BY recnum;
我正在绑定第一列。
有没有办法可以强制用户使用列表中的内容而不要求他们输入前导零?
答案 0 :(得分:3)
对于组合框的行源,您可以使用从recnum
字段字符串值中丢弃前导零的查询。使用自定义VBA函数中的正则表达式可以轻松剥离这些零。这是下面包含的StripLeadingZeros()
函数的立即窗口演示。
? StripLeadingZeros("000000AV1-00011")
AV1-00011
? StripLeadingZeros("000000TI1-00035")
TI1-00035
所以你可以在这样的查询中使用该函数......
SELECT recid, StripLeadingZeros(recnum) FROM receiver ORDER BY 2;
将该查询作为组合框的行源,用户将看不到前导零。如果他们确实需要查看但未键入前导零,则可以将recnum
再次添加为第三列。
如果您的字符串值仅包含 位,则任务会更简单。您可以使用Val()
函数将这些字符串转换为数字。您仍然可以使用StripLeadingZeros()
,但Val()
应该更快。
SELECT recid, Val(recnum) FROM receiver ORDER BY 2;
Public Function StripLeadingZeros(ByVal pstrInput As String) As String
Static re As Object
If re Is Nothing Then
Set re = CreateObject("VBScript.RegExp")
re.pattern = "^0*"
End If
StripLeadingZeros = re.Replace(pstrInput, vbNullString)
End Function