使用VBA在Access表中记录计数

时间:2011-07-20 17:41:21

标签: ms-access access-vba

我正在尝试获取表的记录数,如果count大于17,则创建一个新表。

Dim rst As DAO.Recordset
strSQL = "Select * from SKUS"
Set rst = db.OpenRecordset(strSQL)

If rst.RecordCount > 17 Then
    Set tdf = db.CreateTableDef("161-0363")

    Set fld = tdf.CreateField("SKUS", dbText, 30)
    tdf.Fields.Append fld

    Set fld = tdf.CreateField("Count", dbInteger)
    tdf.Fields.Append fld

    db.TableDefs.Append tdf
End If

此代码不会创建新表,但是当我将if语句更改为this时,它可以工作:

...
If rst.RecordCount > 0 Then
    Set tdf = db.CreateTableDef("161-0363")
...

所以RecordCount正在返回1,我想。为什么会这样?我知道桌子上有18行。
任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:7)

您必须强制记录集在所有行中移动才能获得准确的计数。试试这个:

...
Set rst = db.OpenRecordset(strSQL)

rst.MoveLast
rst.MoveFirst
If rst.RecordCount > 17 Then
...

除非您在记录集中使用未在代码段中显示的其他内容,否则只需使用域计数功能检查记录计数即可简化代码:

If DCount("*", "SKUS") > 17 Then

答案 1 :(得分:3)

strsql的问题是,当字符串表示参数查询时,上述代码不起作用。

在这种情况下,我会在代码中使用一个仪表,如下所示:

rs.movelast
X = rs.recordcount
Rs.movefirst
Do until rs.eof
    For i = 1 to X
        If i<=17 then
            Do things
        Else
            Do things
        End if
    Next i
Loop