2017-09-08 62 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 –