访问VBA-产品搜索失败

时间:2018-11-06 09:33:34

标签: vba ms-access

我正在尝试查找文件中至少与字符匹配的所有代码。因此,如果我写下“ a”,我想知道其中所有包含“ a”的代码名称。如果我写“ anaconda”并且此代码存在,并且至少有一个寄存器,则函数应该找到它。

Private Function VerificaProducto(ByVal Codigo, ByVal Familia, ByVal Proveedor) As String

    Dim Horno As Database
    Dim Panes As Recordset

    Set Horno = CurrentDb

    If Proveedor = "Cuetara" Then
        Set Panes = Horno.OpenRecordset("almacenpanes", dbOpenDynaset)

        If Familia Like "Integral" Then 
            Panes.FindFirst "codigo = ' " & "*" & Codigo & "*" & " ' and activo = true and tipo = 'Hidratos' and familia LIKE '*'&'INTEGRAL'&'*'"
        Else
            Panes.FindFirst "codigo = ' " & "*" & Codigo & "*" & " ' and activo = true and tipo = 'Hidratos' and familia NOT LIKE '*'&'INTEGRAL'&'*'"
        End If
    End If

    If Panes.NoMatch Then
        Me!NombreProducto = "CODIGO NO PRESENTE EN LAS TABLAS"
        VerificaProducto = "producto no encontrado"
    Else
        VerificaProducto = "producto encontrado"
    End If

End Function 

对为什么它不起作用有任何想法吗?

1 个答案:

答案 0 :(得分:0)

您在搜索字符串中包括两个文字空间:此处:' " &和此处& "*" & " '

这意味着您仅在codigo以空格开头和结尾时匹配。

废弃这些空格:

If Familia Like "Integral" Then 
    Panes.FindFirst "codigo = '" & "*" & Codigo & "*" & "' and activo = true and tipo = 'Hidratos' and familia LIKE '*'&'INTEGRAL'&'*'"
Else
    Panes.FindFirst "codigo = '" & "*" & Codigo & "*" & "' and activo = true and tipo = 'Hidratos' and familia NOT LIKE '*'&'INTEGRAL'&'*'"
End If

此外,我建议考虑使用转义功能将单引号加倍。如果condigo包含单引号,则您的函数将遇到运行时错误,如果要使用.FindFirst

,则afaik无法使用参数修复该问题。

进一步的注意:and familia NOT LIKE '*'&'INTEGRAL'&'*'令我感到困惑,似乎您正在尝试将VBA中的字符串连接起来,但事实并非如此。建议您改用and familia NOT LIKE '*INTEGRAL*',以确保您使用的是常量而不是变量。

If Familia Like "Integral" Then同样令人困惑。如果要检查Familia是否包含字符串"Integral",请使用If Familia Like "*Integral*" Then。如果要测试完全匹配,请使用If Familia = "Integral" Then