1

重複の可能性:
SQLクエリとVBAエラー

私はこのエラーを受け取り続けています:

BOFまたはEOFがtuTrueに設定されているか、現在のレコードが削除されています。要求された操作には現在のレコードが必要です。

    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

SUMを要求しているのに、なぜBOFまたはEOFを要求したのですか?また、このクエリをplzで機能させる方法は?私はこのデバッグで息をすることができません

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

データにコメントすることはできませんが、クエリ(MyQuery)でデータの行が生成されないため、EOFエラーが発生します。クエリでレコードセットを開いた後、続行する前に、まずレコードセットに行が含まれていることを確認する必要があります(つまり、ファイル'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

更新/挿入操作の途中で、DBエラーが発生した場合やその他の問題が発生した場合は、データベースを適切にロールバックする必要があります。そうしないと、データベースが不快な状態のままになる可能性があります。たとえば、以下を参照してください。

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 に答える