[access报表]创建完美报表
时 间:2007-10-18 21:21:12
作 者:胡春林 ID:14 城市:长沙
摘 要:创建完美报表
正 文:
一、基本原理
对于一些复杂的或有特殊要求的查询,用ADO(ActiveX数据对象)来处理要比用Access本身提供的查询管理器更灵活一些。所以我们的基本思路是:用ADO执行一条或多条特定的SQL查询,生成我们所需要的一个或多个Recordset,再将这些Recordset中的数据逐条输出到Word文档,然后就可以用程序或手工控制Word文档的格式,达到我们的特殊要求。这听起来挺麻烦,可只要了解了其工作原理,实际操作却很简单。下面就分别以在Access中和在Word中的具体操作为例进行介绍。
二、在Access中应用ADO将数据输出到Word
1. 系统配置
系统软件:Microsoft Windows 9x/NT/2000;Microsoft Access 2000;Microsoft Word 2000。
样例数据库:“C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb”,Office 2000中包含的例子。可将其中的“产品”表复制到一个新的数据库中,如“D:\db1.mdb”。
窗 体:在数据库“D:\db1.mdb”中新建窗体“窗体1”,其中只包含1个命令按钮“命令0”。
引用ADO:按Alt+F11进入Visual Basic编辑器,执行“工具”->“引用”命令,在弹出的引用窗体中选择“Microsoft ActiveX Data Objects 2.1”或更高版本。
引用Word:再次执行命令“工具”->“引用”,在弹出的引用窗体中选择“Microsoft Word 9.0 Object Library”。
2. 代码详解
在“窗体1”的设计模式下右键单击“命令0”按钮,选择“事件生成器”,进入Visual Basic编辑器,创建过程“Private Sub 命令0_Click()”,其代码如下:
Sub 命令0_Click()
'输入表格标题
Title = InputBox(vbCrLf & vbCrLf & "请输入表格标题:", "表格标题", "XX公司产品报价单")
If Title = "" Then Title = "XX公司产品报价单"
'步骤1:建立数据连接cnn
'由于数据库已经打开,所以直接应用CurrentProject.Connection就可以建立连接
Set cnn = New ADODB.Connection
Set cnn = CurrentProject.Connection
'步骤2:用SQL语句创建记录集rs
Set rs = New ADODB.Recordset
'设定游标类型与锁定类型
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
'制定特定的查询条件,可以是任何有效的SQL查询,甚至包括多表、多条件等复杂的查询,查询条件也常常从窗体取得
SQL = "select 产品名称,单位数量,单价,库存量 from 产品 where 单价>10.00"
'创建记录集rs
rs.Open SQL, cnn
'统计字段数及记录数
total_fields = rs.Fields.Count
total_records = rs.RecordCount
'步骤3:建立Word文档对象
Set mywdapp = CreateObject("word.application")
'调整Word窗口大小
mywdapp.WindowState = wdWindowStateNormal
'生成新的Word文档实例
mywdapp.Documents.Add
'设置视图为页面视图
mywdapp.ActiveWindow.View.Type = wdPrintView
'转到Word视图,显示文档生成过程
mywdapp.Visible = True
mywdapp.Activate
'设置文档(表格)字体
mywdapp.ActiveDocument.Range.Font.Size = "9"
'步骤4:将记录集rs中的字段名称和字段内容输出到Word,各字段之间用制表符分隔
'输出字段名称
For I = 0 To total_fields - 2
mywdapp.Selection.TypeText Text:=rs.Fields(I).Name & vbTab
Next I
'最后一个字段名称后加回车符
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).Name & vbCrLf
'逐条输出字段内容
Do While Not rs.EOF
For I = 0 To total_fields - 2
tmpstr = rs.Fields(I).Value
If rs.Fields(I).Name = "单价" Then
tmpstr = Format(tmpstr, "####.00")
End If
mywdapp.Selection.TypeText Text:=tmpstr & vbTab
Next I
'一条记录的最后一个字段后加回车符
mywdapp.Selection.TypeText Text:=rs.Fields(total_fields - 1).Value & vbCrLf
rs.MoveNext
Loop
'步骤5:关闭记录集
rs.Close
Set rs = Nothing
'步骤6:对Word中的数据进行格式化处理
'选定文本,将其转换为表格
'设置视图为普通视图
mywdapp.ActiveWindow.View.Type = wdNormalView
'将光标移动到文档末尾
mywdapp.Selection.EndKey Unit:=wdStory
'删除文档末尾多余的回车符
mywdapp.Selection.Delete Unit:=wdChar
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 平台附件上传,增加粘贴剪贴板图...(01.18)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- Inputbox输入密码打开查...(12.23)
- 【Access Dsum示例】...(12.16)
- Inputbox输入密码打开窗...(12.13)
- 【Access DCount示...(12.02)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
学习心得
最新文章
- 平台附件上传,增加粘贴剪贴板图像功...(01.18)
- 【IIF函数示例】用iif函数判断...(01.18)
- Access快速开发平台--如何获...(01.17)
- Access快速开发平台--如何获...(01.15)
- 【Access Format示例】...(01.13)
- 【Access高效办公】上月累计记...(01.09)
- 【Access高效办公】上月累计数...(01.06)
- 【Access高效办公】条件格式设...(01.03)
- 【Access上月初、上月末日期设...(01.02)
- 用VBA代码自动引用ADO(Win...(12.27)