访问VBA:DLookUp函数给出类型不匹配错误

Shu*_*ham 3 ms-access vba

我正在尝试运行以下代码,但我在DLookUp上遇到"类型不匹配"编译错误.

DLookUp返回一个值,对吗?对我来说,这段代码说:在strSQL记录集中,查找SKUS_ORDERED列等于curSKU2的位置.strSQL,temp,curSKU2都被初始化为字符串类型变量.

...
 strSQL = "SELECT * FROM ORDER_DATA WHERE [ORDER]=" & curOrder

 Dim temp As String
 temp = DLookup("SKUS_ORDERED", db.OpenRecordset(strSQL), SKUS_ORDERED = curSKU2)
...
Run Code Online (Sandbox Code Playgroud)

类型不匹配在哪里?谁能帮我吗?

编辑:

       ...
        Set fld_orders = rst_orders.Fields("ORDER")
        curOrder = fld_orders.Value

        Dim temp As String
        temp = DLookup("SKUS_ORDERED", "ORDER_DATA", "SKUS_ORDERED = '" & curSKU2 & "' AND [ORDER] = " & curOrder)

        If temp <> Null Then MsgBox temp
       ...
Run Code Online (Sandbox Code Playgroud)

整个代码很长,但这里有一个更大的片段,其中curOrder被初始化,这是一个嵌套循环,curSKU2在循环之前被初始化.希望能帮助到你.

Chr*_*cht 5

发生不匹配是因为第二个参数需要是字符串,而不是RecordSet.
如果第三个参数中的任何参数是变量(就像你的情况一样),那么第三个参数也需要是一个连接的字符串:

temp = DLookup("SKUS_ORDERED", "ORDER_DATA", _
            "SKUS_ORDERED = '" & curSKU2 & "' and ORDER = " & curOrder)
Run Code Online (Sandbox Code Playgroud)

编辑:

如果没有更多代码,很难看到你在哪里使用Null.
表名和列名是否正确?
你的变量是什么类型的?他们真的有价值吗?
你能发布更多代码,我们可以看到你如何声明和填充变量吗?

"_"字符表示换行符.我可以将整个语句写成一行,但是你必须滚动才能完全看到它:

temp = DLookup("SKUS_ORDERED", "ORDER_DATA", "SKUS_ORDERED = '" & curSKU2 & "' and ORDER = " & curOrder)
Run Code Online (Sandbox Code Playgroud)

编辑2:

你能展示声明两个变量的部分以及curSKU2初始化的部分吗?根据你发布的内容,仍然无法看到curSKU2是否被填充以及两者都是什么类型.

另外,temp声明为字符串,因此它永远不会是空的.
这有两个后果:

  1. If temp <> Null 没有意义.
  2. 当没有找到记录时,DLookup返回Null,因此类型不匹配可能在行中temp = DLookup(...).
    试试吧temp = Nz(DLookup(...)).