ms-access - 在组合框中输入时不需要前面的零

标签 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; 

我绑定(bind)到第一列。

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

最佳答案

对于组合框的行源,您可以使用一个查询来丢弃 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

关于ms-access - 在组合框中输入时不需要前面的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451134/

相关文章:

sql - Access SQL LEFT JOIN 替代方案

ms-access - 表字段说明 - MS Access

ms-access - 没有值的 MS Access INSERT INTO 语句

sql - Access - 检查月份和年份是否在日期范围内

vba - 如何获取表单的最后一条记录ID?

sql - 无法使用 MS Access 前端删除记录

vb.net - 每次操作后关闭 Access 数据库还是保持打开状态以供以后操作更好

ms-access - VBA 和 MS-Access 中的 Bang 表示法和点表示法

c# - 如何重置 MS Access 中的标识列

sql - 在 MS Access 中回滚多个 SQL 更新查询