我正在尝试运行以下代码,但我在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)
...
类型不匹配在哪里? 任何人都可以帮助我吗?
编辑:
...
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
...
整个代码很长但是这里有一个更大的片段,其中curOrder被初始化,这是一个嵌套循环,curSKU2在循环之前被初始化。希望它有所帮助。
答案 0 :(得分:5)
发生不匹配是因为第二个参数需要是字符串,而不是RecordSet 如果第三个参数中的任何参数是变量(就像你的情况一样),那么第三个参数也需要是一个连接的字符串:
temp = DLookup("SKUS_ORDERED", "ORDER_DATA", _
"SKUS_ORDERED = '" & curSKU2 & "' and ORDER = " & curOrder)
编辑:
如果没有更多代码,很难看到你在哪里使用Null
表名和列名是否正确?
你的变量是什么类型的?他们真的有价值吗?
您可以发布更多代码,我们可以看到您如何声明和填充变量吗?
“_”字符表示换行符。我本可以将整个语句写成一行,但是你必须滚动才能完全看到它:
temp = DLookup("SKUS_ORDERED", "ORDER_DATA", "SKUS_ORDERED = '" & curSKU2 & "' and ORDER = " & curOrder)
编辑2:
您能否显示声明两个变量的部分以及curSKU2初始化的部分?根据你发布的内容,仍然无法看到curSKU2是否被填充以及两者都是什么类型。
另外,temp
被声明为字符串,因此它永远不会为空
这有两个后果:
If temp <> Null
没有意义。temp = DLookup(...)
行。
请改为temp = Nz(DLookup(...))
。答案 1 :(得分:2)
我建议你更改代码的这一部分......
Dim temp As String
temp = DLookup("SKUS_ORDERED", "ORDER_DATA", "SKUS_ORDERED = '" & curSKU2 & "' AND [ORDER] = " & curOrder)
到此......
Dim temp As String
Dim strCriteria As String
strCriteria = "SKUS_ORDERED = '" & curSKU2 & "' AND [ORDER] = " & curOrder
Debug.Print strCriteria
Debug.Print TypeName(DLookup("SKUS_ORDERED", "ORDER_DATA", strCriteria))
temp = DLookup("SKUS_ORDERED", "ORDER_DATA", strCriteria)
如果出现错误,请切换到立即窗口以查看Debug.Print语句的输出。
第一个将为您提供WHERE条件的文本,您可以在新查询中进行测试:
SELECT SKUS_ORDERED FROM ORDER_DATA WHERE [strCriteria text here]
TypeName()函数将告诉您DLookup()返回的值的数据类型。如果TypeName表示Null,则在尝试将其分配给字符串变量(temp)时会出现错误,因为字符串值永远不能为Null。