我正在尝试获取表的记录数,如果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行。
任何人都可以帮助我吗?
答案 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