Office中国论坛/Access中国论坛

标题: [求助]表单行数如何统计? [打印本页]

作者: AZA    时间: 2006-10-26 23:09
标题: [求助]表单行数如何统计?
我的一个Access文件中有60个表,每个表大概6000行,我现在想精确统计每个表的具体行数,我以前的笨办法是一个一个表打开,等它们自动显示出来之后再自己记下来。请问有没有更便捷的办法?最好能自动生成一个统计报表,列出每个表名及相应的行数。谢谢!
作者: wuaza    时间: 2006-10-27 00:27
Private Sub count()
Dim i As Variant
For Each i In Application.CurrentData.AllTables
If Left(i.Name, 4) <> "Msys" Then
    If DCount("*", i.Name) > 0 Then
        MsgBox i.Name & "共有记录数" & DCount("*", i.Name) & "条"
    End If
End If
Next
End Sub
作者: aydl1014    时间: 2006-10-27 00:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 一点通    时间: 2006-10-27 01:26
可以的,你加在按钮的单击事件中测试一下吧
作者: aydl1014    时间: 2006-10-27 01:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: wuaza    时间: 2006-10-27 02:43
1、你其中一个and前少了空格。

2、rst记录集需要update。
作者: aydl1014    时间: 2006-10-27 16:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: vios2009    时间: 2006-10-27 17:57
谢谢~看看~
作者: aydl1014    时间: 2006-10-27 18:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: AZA    时间: 2006-10-27 18:40
谢谢各位指点!我试试~
作者: wuaza    时间: 2006-10-27 18:53
以下是引用aydl1014在2006-10-27 10:04:00的发言:


还可以这样写,代码比较简练

CurrentProject.Connection.Execute "DELETE * FROM 临时表;"
CurrentProject.Connection.Execute "INSERT INTO 临时表(表名) SELECT MSysObjects.Name FROM MsysObjects WHERE (Left$([Name],1)<>'~') AND (Left$([Name],4) <> 'Msys') AND Name<>'临时表'AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name;"
CurrentProject.Connection.Execute "update 临时表 set 记录数=dcount('[编号]',表名);"
DoCmd.OpenTable "临时表"

很好!
作者: AZA    时间: 2006-10-27 19:13
以下是引用aydl1014在2006-10-27 10:04:00的发言:


还可以这样写,代码比较简练

CurrentProject.Connection.Execute "DELETE * FROM 临时表;"
CurrentProject.Connection.Execute "INSERT INTO 临时表(表名) SELECT MSysObjects.Name FROM MsysObjects WHERE (Left$([Name],1)<>'~') AND (Left$([Name],4) <> 'Msys') AND Name<>'临时表'AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name;"
CurrentProject.Connection.Execute "update 临时表 set 记录数=dcount('[编号]',表名);"
DoCmd.OpenTable "临时表"



这段代码在我的机上运行时出现如下问题提示框:

***********************************************

Runtime'-2147217900(80040e14):'

Unknown

***********************************************

我按了调试键后,下面这句代码用黄色高亮显示:

******************************************************

CurrentProject.Connection.Execute "update 临时表 set 记录数=dcount('[编号]',表名);"

************************************************************

我机上的完整代码是:

Option Compare Database
Private Sub Command0_Click()
CurrentProject.Connection.Execute "DELETE * FROM 临时表;"
CurrentProject.Connection.Execute "INSERT INTO 临时表(表名) SELECT MSysObjects.Name FROM MsysObjects WHERE (Left$([Name],1)<>'~') AND (Left$([Name],4) <> 'Msys') AND Name<>'临时表'AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name;"
CurrentProject.Connection.Execute "update 临时表 set 记录数=dcount('[编号]',表名);"
DoCmd.OpenTable "临时表"
End Sub
*************************************************************************

请问如何纠正?谢谢!

[此贴子已经被作者于2006-10-27 11:13:31编辑过]


作者: AZA    时间: 2006-10-27 19:22
以下是引用aydl1014在2006-10-27 8:23:00的发言:


谢谢wuaza,空格没问题(估计是论坛自动排版的原因),关键是没有rst.update,已成功了

ATA,你可以看这个例子,需要建一个表,命名为“临时表”,含两列:表名、记录数[attach]21184[/attach]

为什么我把代码转到我文件中运行时会出现下面问题?

Compile error:

User-defined type not defined

按OK键后,代码中如下语句黄色高亮:

Private Sub Command0_Click()

Dim rst As DAO.Recordset
作者: AZA    时间: 2006-10-27 19:34
以下是引用wuaza在2006-10-26 16:27:00的发言:
Private Sub count()
Dim i As Variant
For Each i In Application.CurrentData.AllTables
If Left(i.Name, 4) <> "Msys" Then
    If DCount("*", i.Name) > 0 Then
        MsgBox i.Name & "共有记录数" & DCount("*", i.Name) & "条"
    End If
End If
Next
End Sub

这段代码可行。只是可惜不是生成报表的形式。
作者: wuaza    时间: 2006-10-27 21:03
Private Sub count()
Dim i As Variant
For Each i In Application.CurrentData.AllTables
If Left(i.Name, 4) <> "Msys" Then
    CurrentProject.Connection.Execute "insert 临时表(表名,记录数) values(i.Name,DCount("*", i.Name))"
End If
Next
End Sub

前提是建好一个包含“表名”和“记录数”这两个字段的临时表
作者: AZA    时间: 2006-10-28 01:55
这行代码:CurrentProject.Connection.Execute "insert 临时表(表名,记录数) values(i.Name,DCount(" * ", i.Name))"

在我的机上又提示错误:

Run-time error'13':

Type Match



我会晕倒了!!


作者: wuaza    时间: 2006-10-28 05:01
不知道怎么回事,那改成这样试试。

Private Sub count()
Dim i As Variant
docmd.setwarnings false
For Each i In Application.CurrentData.AllTables
If Left(i.Name, 4) <> "Msys" Then
docmd.RunSQL "insert 临时表(表名,记录数) values(i.Name,DCount("*", i.Name))"
End If
Next
docmd.setwanings true
End Sub
作者: AZA    时间: 2006-10-31 23:24
还是提示错误,同16楼一样.[em06]
作者: wuaza    时间: 2006-11-1 00:16
八成是你的临时表有问题,你看看字段的数据类型是否对应。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3