在没有 .movelast 的情况下,我会遇到这个 .recordcount() 的问题吗?

Am i going to go have issues with this .recordcount() without .movelast?

我的 VBA 代码似乎工作正常,或者,我还没有发现问题... 当我在 recordcount = 0 中使用 rs.movelast 时,我确实遇到了问题。所以我注释掉了 rs.movelast 并且我的代码工作正常。

但是,我知道在使用 recordcount() 时,最好执行 .movelast,因为 recordcount 只计算已访问的内容。

我的代码:

Set rs = db.OpenRecordset(varSQL0, dbOpenDynaset)

'    rs.MoveLast
    Debug.Print rs.RecordCount
    If rs.RecordCount = 0 Then
'----create new-----
        Set rs1 = CurrentDb.OpenRecordset(Name:="Supplier_Dnotes", Type:=RecordsetTypeEnum.dbOpenDynaset)
              With rs1
                .AddNew
                ![Supplier_Dnote_Ref] = varDnoteRef
                ![Supplier_Dnote_date] = Forms!delivery_Note_Ex.Supplier_Dnote_date
                ![Created_By] = gLoggedIn
                ![Created_Date] = Date
                .Update
             End With
    rs1.Close
    Set rs1 = Nothing
    Else
.....

如果我排除 .movelast,我的 recordcount 会有问题吗?

是否有其他方法可以尝试避免这个潜在问题?

我应该补充一点,我已经为 supplier_dnote_ref 编制了索引,因此如果出现问题,则不应添加新记录,因为它已经存在。此外,现在我已经为我的 table 编制了索引,我认为 recordcount() 不应超过 1。

当你想使用 RecordCount 时,你应该做一个 MoveLast。 但是正如你所说,如果你没有任何记录,那就是一个问题。

但你不必找出正确的计数,只要有记录即可。另一种方法是将 If-then-else "RecordCount = 0" 改为

If Not (rs.EOF And rs.BOF) then
   ' the record count is > 0
   'Code...
Else
   ' the record count is 0
   'Code...
End If

BOF的意思是:记录前

EOF表示:在记录之后

这意味着 => EOF 和 BOF:没有记录

您不应使用 movelast 添加记录。可能只是徒劳地增加了一些操作时间。