我正在尝试运行以下代码,但我在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在循环之前被初始化.希望能帮助到你.
发生不匹配是因为第二个参数需要是字符串,而不是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声明为字符串,因此它永远不会是空的.
这有两个后果:
If temp <> Null 没有意义.temp = DLookup(...).temp = Nz(DLookup(...)).