在组合框中输入时不要求前面的零

时间:2013-08-26 19:01:47

标签: ms-access

我有一些需要用户输入的组合框。在Access 2000中,我通过ODBC链接到我们的ERP数据库(FoxPro)。所以,我根本无法修改表结构。无论出于何种原因,很多领域都有前导零。我在组合框中将 限制列表 设置为

组合框示例:

enter image description here

如果用户不必输入前导零,我希望如此。但是,如果用户在哪里输入47009,他们会收到错误:

The text you entered isn't an item in the list.

字段是文本,我的行源看起来像:

SELECT recid, recnum FROM receiver ORDER BY recnum; 

我正在绑定第一列。

有没有办法可以强制用户使用列表中的内容而不要求他们输入前导零?

1 个答案:

答案 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