RecordSet 克隆 RecordCount 等于 0?
Posted
技术标签:
【中文标题】RecordSet 克隆 RecordCount 等于 0?【英文标题】:RecordSet Clone RecordCount Equals 0? 【发布时间】:2014-02-03 21:30:04 【问题描述】:我有点困惑,为什么这没有找到记录数。我的表“tblDatabase”有 3 条记录。我希望它克隆记录集,以便我们实际上不会更改任何记录。我们只想在浏览数据时读取它们,然后进一步浏览被选中的项目(在这种情况下,字段“SELECT”设置为 True)。
谁能告诉我我做错了什么? RecordCount 一直返回为 0。尝试使用 RS1.MoveLast、MoveNext 等...但返回结果相同。非常感谢对我做错的任何帮助!
Set RS1 = CurrentDb.OpenRecordset("tblDatabase").Clone
RS1.MoveFirst
Debug.Print RS1.RecordCount
For i = 1 To RS1.RecordCount
If RS1.Fields("Select") = True Then
strRequestNo = strRequestNo & IIf(Len(strRequestNo) = 0, "", ",") & Str(RS1.Fields("Request No"))
strName = RS1.Fields("Name")
'Pops up the Approval Dialog for user to Name + Date Approved.
'The Code should not continue until the form is closed.
DoCmd.OpenForm "frmClientAuthorization", acNormal, , , acFormEdit, acDialog, strRequestNo & "|" & strClientName
End If
RS1.MoveNext
Next i
【问题讨论】:
是第三行(Debug.Print RS1.RecordCount)返回零吗? 是的,第 3 行返回 0,但是,我已将第 2 行更改为 RS1.MoveLast,它仍然为 Debug.Print 返回 0。 我尝试在下面回答。 尝试将CurrentDb.OpenRecordset("tblDatabase").Clone
更改为CurrentDb.OpenRecordset("tblDatabase", dbOpenSnapshot)
。
【参考方案1】:
Please note that clone does not make a recordset read only.你真的不需要那个。
如果你想要一个只读记录集,我建议在打开记录集时使用 dbReadOnly 的 RecordsetOptionEnum 值:
How to open a record set
RecordsetOptionEnum
关于它返回零记录数,您需要指定打开一个表类型的记录集:
'Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("tblDatabase", dbOpenTable)
另外,这里有(在我看来)两种更优雅的循环记录集的方法:
Example 1
Example 2
HTH,
埃里克
【讨论】:
抱歉 - 我将第 1 行更改为: Set RS1 = CurrentDb.OpenRecordset("tblDatabase") 但是,它仍然保持不变。我假设这就是您所说的“摆脱克隆”的意思?不过谢谢你的建议。 是的,我做到了,但我错了。这要追溯到十多年前,所以我有点生疏了。您确定您的数据库中有一个名为 tblDatabase 的表并且其中有记录吗?也许 CurrentDb 没有指向您认为的位置。 也许你需要指定你正在打开一个表:Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)【参考方案2】:如果你使用“for i = ...”,那么你需要做一个 rs1.movelast myvar = rs1.recordcount rs1.movefirst 以了解有多少记录与记录集匹配。
在 for-next 循环中使用 myvar 变量
执行任务的更简洁的方法是:
RS1.MoveLast
Debug.Print RS1.RecordCount
Do Until rs1.EOF = True
If RS1.Fields("Select") = True Then
strRequestNo = strRequestNo & IIf(Len(strRequestNo) = 0, "", ",") & Str(RS1.Fields("Request No"))
strName = RS1.Fields("Name")
'Pops up the Approval Dialog for user to Name + Date Approved.
'The Code should not continue until the form is closed.
DoCmd.OpenForm "frmClientAuthorization", acNormal, , , acFormEdit, acDialog, strRequestNo & "|" & strClientName
End If
RS1.MoveNext
Loop
【讨论】:
以上是关于RecordSet 克隆 RecordCount 等于 0?的主要内容,如果未能解决你的问题,请参考以下文章
MS-Access Recordset to Array,值被转置