2017-09-08 86 views
0

不完全確定如何解決這個代碼給我一個運行時錯誤3021:沒有當前記錄。運行時錯誤3021

目的是單擊此按鈕,它將填充查詢的第一條記錄的結果的幾個文本框。然後應該使用MoveNext從查詢結果的下一個記錄中填充另外兩個文本框。

Private Sub btnSCC07_Click() 

Dim dbs As DAO.Database 
Dim rsTable As DAO.Recordset 
Dim rsQuery As DAO.Recordset 


Set dbs = CurrentDb 

Set rsQuery = dbs.OpenRecordset("SELECT * FROM qrySccS2 WHERE PAYORNAME = 'Medicaid' AND OVERRIDECODESALL = 7", dbOpenDynaset) 

rsQuery.FindFirst ("[PAYORNAME]='Medicaid'") 
num1 = rsQuery!PAYPLANNAME 
num2 = rsQuery!Count 
txtMedicaid9 = num1 
txtMedicaidCount9 = num2 
Debug.Print (txtMedicaid9) 


rsQuery.MoveNext 
Debug.Print ("Test") 
num3 = rsQuery!PAYPLANNAME 
num4 = rsQuery!Count 
txtMedicaid10 = num3 
txtMedicaidCount10 = num4 


rsQuery.Close 
Set rsQuery = Nothing 

因此,第一部分工作,但它是當它到達行num3 = rsQuery!PAYPLANNAME是它拋出錯誤的地方。提前感謝您提供的任何見解。

+0

你需要檢查記錄計數,以確保您有結果返回。 rsQuery.RecordCount或rsQuery.EOF – Sorceri

+0

@Sorceri嗯所以我只是試過,debug.print返回1 ......但是當我運行查詢本身的參數它返回12結果? –

+0

在打開記錄集'rsQuery.MoveLast rsQuery.MoveFirst'後使用行來強制計數。爲什麼你有沒有循環的MoveNext? – June7

回答

0

你應該使用NOMATCHEOF打安全:

Set rsQuery = dbs.OpenRecordset("SELECT * FROM qrySccS2 WHERE PAYORNAME = 'Medicaid' AND OVERRIDECODESALL = 7", dbOpenDynaset) 

If rsQuery.RecordCount > 0 Then 
    rsQuery.FindFirst "[PAYORNAME]='Medicaid'" 
    If Not rsQuery.NoMatch Then 
     num1 = rsQuery!PAYPLANNAME.Value 
     num2 = rsQuery!Count.Value 
     txtMedicaid9 = num1 
     txtMedicaidCount9 = num2 
     Debug.Print txtMedicaid9 

     If Not rsQuery.EOF Then 
      rsQuery.MoveNext 
      Debug.Print "Test" 
      num3 = rsQuery!PAYPLANNAME.Value 
      num4 = rsQuery!Count.Value 
      txtMedicaid10 = num3 
      txtMedicaidCount10 = num4 
     End If 
    End If 
End If 
rsQuery.Close 

Set rsQuery = Nothing 
+0

這工作完美,非常感謝你! –

+0

因此,出於某種原因,當我從其運行的實際查詢中刪除條件但將其保留在代碼中時,它會給我發現無當前記錄錯誤。有關於此的任何想法? –

+0

哦,我知道了......顯然我限制了查詢返回只有10個結果.... durrr –