1

我开始在 Access 中进行编程,我真的需要帮助!

我的目标是创建一个在“tbCustoProjeto”表中运行的模块,并根据 Dlookup 重写字段“Valor HH”值。我找到了一些我认为可以解决这个问题的解决方案(由 azurous 提供),但是当我运行代码时,返回

“对象所需的错误”。

Sub redefineHH()
Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
Dim i As Integer
Dim value As Variant
Dim HHTotal As Double
Set HHTotal = DLookup("[CustoTotalNivel]", "tbNivelNome2", "nUsuario='" & tbCustoProjeto!NumUsuario & "'" & "AND Numeric<=" & tbCustoProjeto!DataNumero)

'initated recordset obejct
objRecordset.ActiveConnection = CurrentProject.Connection
Call objRecordset.Open("tbCustoProjeto", , , adLockBatchOptimistic)
'find the target record
While objRecordset.EOF = False
'If objRecordset.Fields.Item(13).value > 0 Then
objRecordset.Fields.Item(13).value = HHTotal
objRecordset.UpdateBatch
'exit loop
'objRecordset.MoveLast
objRecordset.MoveNext
'End If
Wend
MsgBox ("Pesquisa Finalizada")
End Sub

tbCustoProjeto 打印

在此处输入图像描述

tbNivelNome2 的打印

在此处输入图像描述

请,有人可以告诉我错误在哪里?我不知道该怎么办。

4

1 回答 1

0

不能像动态参数那样直接引用表。DLookup 应该从记录集中和循环中提取动态标准。不要对数字类型字段参数使用撇号分隔符。

删除不必要的串联。

Sub redefineHH()
Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
objRecordset.Open "tbCustoProjeto", CurrentProject.Connection, , adLockBatchOptimistic
While objRecordset.EOF = False
    objRecordset.Fields.Item(13) = DLookup("[CustoTotalNivel]", "tbNivelNome2", _
        "nUsuario=" & objRecordset!NumUsuario & " AND Numeric <=" & objRecordset!DataNumero)
    objRecordset.UpdateBatch
    objRecordset.MoveNext
Wend
MsgBox ("Pesquisa Finalizada")
End Sub
于 2020-05-03T01:08:56.480 回答