2012-11-02 52 views
1

Possible Duplicate:
SQL Query & VBA errorSQL查詢和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,因爲我所要求的總和?也如何讓這個查詢工作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 
+0

你檢查,你必須在該日期範圍REL12任何記錄? – Fionnuala

+0

好找的Remou,我沒有檢查日期,它需要11月,我沒有記錄 thx alot Remou :) – Phaoris

回答

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 

如果您在更新/插入操作過程中,你應該做的,你得到一個數據庫錯誤或別的東西,失敗事件數據庫的正確回滾,否則,你可以在離開數據庫不愉快的狀態。例如見下文。

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