首页 > 解决方案 > 标准中的 OnlyDigits 函数

问题描述

我的数据库有一个由年+月/序列号+类型组成的工作编号字段。可以有多个具有相同作业编号的作业:

201812/6门
201812/6楼梯
201812/6衣柜

当用户想要更改任何/所有这些记录的日期时,我希望所有 201812/6 工作都显示在表单中。

我已成功使用下面的 OnlyDigits 函数从文本字段中仅提取数字:OnlyDigits(JobNumber) = 2018126。但我不知道如何过滤表单以显示包含 2018126 的所有工作。

我尝试使用此查询,但收到错误消息,表示表达式输入错误或太复杂。

SELECT onlydigits(jobnumber) AS JobNumberDigits, tbldelivery.DelDateDoors, tbldelivery.Lag, tbldelivery.ProductionDate, tbldelivery.OrderNumber, tbldelivery.JobNumber
FROM tbldelivery
WHERE (((onlydigits(jobnumber))=OnlyDigits([Forms]![tblDelivery]![JobNumber])));

我还尝试在 Docmd.OpenForm 中使用 where 表达式,但这也不起作用。谁能建议我如何使用此功能进行过滤?

Public Function OnlyDigits(ByVal pInput As String) As String
    Static objRegExp As Object

    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        With objRegExp
            .Global = True
            .Pattern = "[^\d]"
        End With
    End If
    OnlyDigits = objRegExp.Replace(pInput, vbNullString)
End Function

标签: ms-accessvba

解决方案


尝试指定参数以使 Access 免于猜测:

PARAMETERS 
    [Forms]![tblDelivery]![JobNumber] Text;
SELECT 
    OnlyDigits(JobNumber) AS JobNumberDigits, 
    tbldelivery.DelDateDoors, 
    tbldelivery.Lag, 
    tbldelivery.ProductionDate, 
    tbldelivery.OrderNumber, 
    tbldelivery.JobNumber
FROM 
    tbldelivery
WHERE 
    OnlyDigits(JobNumber)=OnlyDigits([Forms]![tblDelivery]![JobNumber]);

或者:

WHERE 
    OnlyDigits(CStr(Nz(JobNumber, 0)))=OnlyDigits([Forms]![tblDelivery]![JobNumber]);

推荐阅读