Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 记录集克隆记录计数是否等于0?_Vba_Ms Access - Fatal编程技术网

Vba 记录集克隆记录计数是否等于0?

Vba 记录集克隆记录计数是否等于0?,vba,ms-access,Vba,Ms Access,我有点困惑,为什么找不到记录计数。我的表“tblDatabase”有3条记录。我希望它能克隆记录集,这样我们就不会改变任何记录。我们只想在浏览数据时读取它们,然后进一步浏览已勾选的项目(在本例中,“SELECT”字段设置为True) 谁能告诉我我做错了什么?RecordCount一直返回为0。尝试使用RS1.MoveLast、MoveNext等。。。但它还是一样。非常感谢任何对我所做错事的帮助 Set RS1 = CurrentDb.OpenRecordset("tblDatabase").Cl

我有点困惑,为什么找不到记录计数。我的表“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
你真的不需要

如果您想要只读记录集,我建议在打开记录集时使用RecordsetOptionEnum值dbReadOnly:

'Open a table-type Recordset
 Set rsTable = dbs.OpenRecordset("tblDatabase", dbOpenTable)

关于返回零记录计数,您需要指定打开表类型记录集:

'Open a table-type Recordset
 Set rsTable = dbs.OpenRecordset("tblDatabase", dbOpenTable)
此外,在我看来,还有两种更优雅的方法可以循环记录集:

'Open a table-type Recordset
 Set rsTable = dbs.OpenRecordset("tblDatabase", dbOpenTable)

嗯,

Eric

如果使用“for i=…”则需要执行 rs1.movelast myvar=rs1.recordcount rs1.1首先 以了解有多少条记录与记录集匹配

在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

是第三行(Debug.Print RS1.RecordCount)返回零吗?是的,第三行返回0,但是,我已将第二行更改为RS1.MoveLast,Debug.Print仍然返回0。我尝试在下面回答它。尝试将
CurrentDb.OpenRecordset(“tblDatabase”).Clone
更改为
CurrentDb.OpenRecordset(“tblDatabase”),dbOpenSnapshot)
。抱歉-我将第1行更改为:Set RS1=CurrentDb.OpenRecordset(“tblDatabase”),但它仍然保持不变。我想这就是你说的“摆脱克隆人”的意思吧?不过,谢谢你的建议。是的,我做了,我大错特错了。这要追溯到十年前,所以我有点生疏了。您确定数据库中有一个名为tblDatabase的表,并且该表中有记录吗?可能CurrentDb没有指向您认为它所在的位置。可能您需要指定您正在打开一个表:Set rsTable=dbs.OpenRecordset(“Table1”,dbOpenTable)