我有一个包含10条记录和一个短文字段的Access表。我使用.recordcount函数返回此表中的记录数。代码如下:
Dim db as DAO.Database
Dim RS as DAO.Recordset
Dim recCount as Integer
Set db = CurrentDb
Set RS = db.OpenRecordset("Table Name")
RS.MoveFirst
RS.MoveLast
recCount = RS.recordcount
Debug.Print(recCount)
Dim i as Integer
i = 0
RS.MoveFirst
'Option one. Commented out when option two is active and vice verse
Do While i < 10
Debug.Print(RS(i))
i = i + 1
Loop
Do While i < 10
Debug.print(RS![Only Field Name])
i = i + 1
RS.MoveNext
Loop
recCount始终打印为0.尝试打印记录集中的记录将仅返回记录集的第一个值,而不返回任何其他值。在读完第一条记录后,程序会抛出错误&#34;项目未在集合中找到。&#34;我不确定可能导致此错误的原因,因为我使用与另一个VBA模块中的另一个表完全相同的方法,这很好。
我在其他地方查看解决方案,我唯一能找到的是在打开后添加RS.moveFirst
和RS.moveLast
,但这不起作用。我认为这是因为打开的记录集实际上并不包含表中的所有记录。
提前致谢。
答案 0 :(得分:2)
您可以在计算时列出记录:
Set RS = db.OpenRecordset("Table Name")
While Not RS.EOF
Debug.Print RS![Only Field Name].Value
i = i + 1
RS.MoveNext
Loop
Debug.Print i & " records found."
答案 1 :(得分:1)
试试这个:
Sub Demo_IterateRecords()
Const tblName = "YOUR TABLE NAME HERE"
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(tblName)
With rs
.MoveLast
.MoveFirst
If MsgBox("Do you want to list all " & .RecordCount & " records?", _
vbOKCancel, "Confirmation") <> vbOK Then GoTo ExitMySub
Do While Not .EOF
Debug.Print .Fields(0), .Fields(1), .Fields(2)
rs.MoveNext
Loop
ExitMySub:
.Close
End With
Set rs = Nothing
End Sub
我使用.Fields(_)
因为我不确定你的字段被调用了什么,但更好的方式是引用它们,例如:
Debug.Print !myID, !myEmployeeName, !myEmployeeAddress
试试这个:
RS.MoveLast
RS.MoveFirst
recCount = RS.RecordCount
Debug.Print(recCount)
Access至少知道有多少条记录,直到您至少浏览过一次。
如果您在循环之后检查了RS.RecordCount
的值,那么您将获得一个数字。
说明
使用
Recordcount
属性查找Recordset或TableDef
对象中已访问的记录数。在访问所有记录之前,RecordCount
属性不指示动态集,快照或仅前向类型Recordset对象中包含的记录数。访问完最后一条记录后,RecordCount
属性指示Recordset或TableDef对象中未删除记录的总数。要强制访问最后一条记录,请使用Recordset对象上的MoveLast方法。您还可以使用SQLCount
函数来确定查询将返回的大致记录数。重要提示
使用
MoveLast
方法填充新打开的Recordset会对性能产生负面影响。 除非您在打开Recordset 时需要准确RecordCount
,否则最好等到您使用其他部分代码填充Recordset < / strong>在检查RecordCount
属性之前。
(Source)功能
另请参阅: MSDN:Recordset.RecordCount Property
答案 2 :(得分:1)
我设法解决了这个问题,但我不知道为什么会这样。我没有使用创建新表并键入十个记录的值,而是使用插入查询将我想要的值从查询中放入表中。使用这个新表,它工作。
答案 3 :(得分:1)
也许你可以在你的子程序中尝试类似的东西:
Dim db As DAO.Database
Dim RS As DAO.Recordset
Dim recCount As Integer
Set db = CurrentDb
Set RS = db.OpenRecordset("Table Name")
If Not (RS.EOF And RS.BOF) Then
RS.MoveFirst
Do Until RS.EOF = True
RS.MoveNext
Loop
MsgBox ("There are:" & " " & RS.RecordCount & " " & "records in the database")
End If
RS.Close
Set RS = Nothing