1

可能重复:
SQL 查询和 VBA 错误

我不断收到此错误:

BOF 或 EOF 设置为真,或当前记录已被删除。请求的操作需要当前记录。

    MyQuery = "Select Destinataire, SUM(" & Entete & ") AS NombreTotal FROM [Feuil1$] " _
         & "WHERE [DateMad] Between #" _
         & Format(date_deb, "yyyy/mm/dd") _
         & "# And #" & Format(date_fin, "yyyy/mm/dd") & "#" & Query3 & " Group By Destinataire"

         objRecordSet.Open MyQuery, objConnection, adOpenStatic, adLockOptimistic

         Feuil3.Cells(1, Col) = Entete
         Feuil3.Cells(strLine, 2) = Entete2
         Feuil3.Cells(2, Col).Value = objRecordSet.Fields("NombreTotal").Value

我在最后一行得到错误

  Feuil3.Cells(2, Col).Value = objRecordSet.Fields("NombreTotal").Value

为什么它问我 BOF 或 EOF,因为我问的是 SUM?还有如何让这个查询工作?我无法呼吸这个调试

debug.print MyQuery 给出以下内容:

 Select Destinataire, SUM(NbCompteurElecNR) AS NombreTotal FROM [Feuil1$] WHERE [DateMad] Between #2012/11/21# And #2012/11/26# And [Destinataire] = 'REL12' Group By Destinataire
4

1 回答 1

0

无法评论您的数据,但您收到 EOF 错误,因为您的查询 (MyQuery) 不会产生任何数据行。使用查询打开记录集后,您必须首先检查它是否包含任何行,然后再继续(即它尚未位于文件“EOF”的末尾)。例如,请参见下文。

MyQuery = "....."

Set objRecordSet = New ADODB.Recordset
objRecordSet.Open MyQuery, objConnection, adOpenStatic, adLockOptimistic

If Not objRecordSet.EOF Then
    'The record set contain one or more rows, do stuff
Else
    'The record set does not contain any rows, take action and notify user
End If

objRecordSet.Close
Set objRecordSet = Nothing

如果您处于更新/插入操作的中间,您应该在遇到数据库错误或其他失败的情况下对数据库进行适当的回滚,否则您可能会使数据库处于不愉快的状态。例如,请参见下文。

On Error Goto Rollback

objConnection.BeginTrans

MyInsertQuery = "..."

Set objRecordSet = New ADODB.Recordset
objRecordSet.Open MyInsertQuery , objConnection, adOpenStatic, adLockOptimistic

objRecordSet(1) = someValue
objRecordSet(2) = someOtherValue
objRecordSet.Update

objRecordSet.Close
Set objRecordSet = Nothing

objConnection.CommitTrans

Exit Sub

Rollback:
    objConnection.RollbackTrans
    objRecordSet.Close
    Set objRecordSet = Nothing
于 2012-11-02T15:30:21.380 回答