VBcodeAccess97报表问题anen

合集下载

修复ACCESS数据库的几种常见方法

修复ACCESS数据库的几种常见方法

二、表中有几行内容非常混乱或字段内标有“#已删除”字样,但当要删除这些记录时就会出现错误信息不许删除。
处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如“凭证及明细账表GL_ACCVOUCH”中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:
一、表损坏的非常严重,表现为无法打开表,系统提示“Microsoft jet 找不到对象”、“没有读写权限”或“不可识别”等信息。
处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如“常用凭证表”、“科目共享锁定表”或“凭证共享锁定表”,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。
SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP
FROM GL_ACCVOUCH WHERE {筛选的条件}
然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的名字改为GL_ACCVOUCH即可解决问题。
修复ACCESS数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。

Access常见错误及解决方案

Access常见错误及解决方案

Access常见错误及解决方案Access是一款功能强大的数据库管理工具,被广泛应用于各个行业的数据处理和管理中。

然而,在使用Access的过程中,我们可能会遇到一些常见的错误,这些错误可能会影响我们对数据的处理和分析。

本文将介绍一些Access常见错误,并提供相应的解决方案。

一、数据库连接错误1. 错误描述:无法连接到数据库。

解决方案:首先,确保你已正确配置数据库连接信息,包括服务器名称、用户名和密码。

如果连接信息正确无误,但仍无法连接数据库,可能是由于网络问题或数据库服务器故障。

你可以尝试重新启动数据库服务器或联系系统管理员进行解决。

2. 错误描述:连接超时。

解决方案:检查网络连接是否正常,并确保数据库服务器的性能良好。

如果网络连接正常且服务器性能正常,但仍遇到连接超时问题,可以尝试增加连接超时时间的设置,以适应较慢的网络环境。

二、数据查询错误1. 错误描述:查询结果为空。

解决方案:检查查询条件是否正确,确保查询的表或字段存在,并包含了需要的数据。

另外,还要验证查询语句是否正确,包括表名称、字段名称和查询条件等。

如果查询条件和语句正确无误,但仍无法得到结果,可能是由于数据库中没有符合条件的数据。

2. 错误描述:查询结果不准确。

解决方案:首先,检查查询条件和语句是否正确,确保查询的是你需要的数据。

其次,验证数据的完整性和准确性,可能需要使用其他工具或方法进行数据清洗和校验。

最后,确保数据库表的索引和统计信息是最新的,以提高查询效率和准确性。

三、数据导入/导出错误1. 错误描述:导入数据时遇到格式错误或数据丢失。

解决方案:首先,检查导入源文件的格式是否与目标数据库兼容,例如,确认源文件的字段类型和目标表的字段类型一致。

其次,验证导入源文件的数据是否完整且正确,可能需要使用其他工具进行数据清洗和转换。

最后,检查导入过程中的错误日志或错误信息,以了解具体的导入错误。

2. 错误描述:导出数据时遇到错误或数据丢失。

Access 97的数据库应用实践

Access 97的数据库应用实践

Access 97的数据库应用实践随着计算机科学的快速发展,数据库技术已经成为了现代信息处理中不可或缺的一部分。

Access 97作为一种Windows平台下的软件,是在数据库管理领域中首屈一指的一种应用软件,它可以方便地用来管理和分析各种类型的数据。

1. Access 97的基本介绍和优缺点Access 97是由Microsoft公司开发的一种可视化的数据库管理软件,它可以帮助用户更轻松地管理和处理各种类型的数据。

在Access 97中,一个用户可以创建多个数据库,并且每个数据库中又可以包含多个数据表。

除此之外,Access 97还提供了一些常用的数据管理功能,如查询、报表、表单和宏等功能。

Access 97的优点主要包括以下几个方面:(1)易于使用:Access 97拥有一个友好的用户界面,用户可以通过它轻松地进行数据库操作,甚至于没有任何编程经验的用户也可以很快上手。

(2)强大的数据管理能力:Access 97提供了丰富的数据管理功能,用户可以通过它快速对数据进行查询、排序、统计、报表生成等操作。

(3)良好的扩展性和灵活性:Access 97支持许多不同类型的数据源和引擎,用户可以方便地扩展和自定义其功能。

(4)开发成本较低:Access 97的开发成本比一些专业的数据库管理软件要低得多,这使得小型企业、个人用户和非专业开发者都可以轻松地进行数据库管理。

然而,Access 97也存在着一些缺点。

最显著的就是其不适用于高并发、高容量的数据库管理。

由于其本质上是一种桌面应用程序,Access 97存在着一定的局限性。

因此,当需要管理大型数据集或需要高度安全性的应用程序时,应该选择更为专业的数据库管理软件。

2. Access 97的应用实践Access 97作为一种强大而易用的数据库管理软件,在现实生产和管理中被广泛使用。

下面我们将从三个方面介绍Access 97的应用实践。

(1)企业内部数据库管理随着计算机技术的不断发展,各个企业的信息化建设也变得越来越重要。

在VB中运行Microsoft Access报表的好方法

在VB中运行Microsoft Access报表的好方法

在VB中运行Microsoft Access报表的好方法
佚名
【期刊名称】《软件》
【年(卷),期】2003(000)011
【摘要】在 VB 中如何使用直观、简便的报表一直是很多人关心的问题,Crystal Reports 用起来又不太理想。

现介绍一在 VB 中运行 Microsoft Access 报表的方法,用起来还不错。

利用 Automation 运行 Microsoft Access 报表1.使用Microsoft Access 建立数据库(如:novelty.mdb)的相关报表(如:rptEmployess)。

2.创建引用在 VB 中使用'Project References'菜单创建一个对 Microsoft Access 8.0 Object Library 的引用。

3.
【总页数】1页(P48)
【正文语种】中文
【中图分类】TP312
【相关文献】
1.Access2010中报表设计方法研究 [J], 王影;
2.巧用ACCESS中的VBA技术实现自由格式报表 [J], 王志新
3.Microsoft Office Access在RSView报表查询系统中的应用 [J], 曹文;孙伟;赵惠
4.Access2010中报表设计方法研究 [J], 王影
5.VB动态操纵Access数据库中OLE字段及产生报表的方法 [J], 张春生
因版权原因,仅展示原文概要,查看原文内容请购买。

VBcodeAccess用对话框anen

VBcodeAccess用对话框anen

Access下如何使用通用对话框 很多用ACCEE97开发过数据库的用户都有这种体会:要想在窗体中添加一个命令按钮实现打开通用对话框的功能真是很困难。

因为ACCESS97本身并未提供这类控件,所以必须通过编写有关的宏才能实现该功能,但是编写出的宏限制很多,比如:在选择文件类型时不能同时存在多种文件格式,必须预定义好某一种格式等等。

因为该控件存放于VB6中,所以具体使用方法和在VB中类似。

其他控件 Microsoft Common Dialog Control,Version 6.0在窗体上形成对话框控件修改控件的名称如:Dialog1设置其属性:在对话框上单击右键 CommonDialog 对象的属性弹出属性对话框(如下图)。

可以看到,属性页的内容包括“打开/另存为”、“颜色”、“字体”、“打印”和“帮助”五组选项。

可以根据提示在属性页中直接进行属性设置,也可通过编程来设置这些属性。

下面分别对各组选项加以说明:A、“打开/另存为”: 对话框标题是“打开/另存为”窗体的标题,如打开文件时可输入“打开文件”,另存文件时可输入“保存文件”。

文件名称是要打开/另存文件的默认值,一般打开/另存时此处为空。

初始化路径是打开/另存文件的默认路径,一般为空。

过滤器是用来在“打开/另存为”处理中,通过对该属性的设置来控制文件的类型。

其设置方法为ACCESS文件|*.mdb|文本文件|*.txt|所有文件|*.*B、颜色C、字体D、打印E、帮助过滤器属性的设置方法:Dialog1.filter = “ACCESS文件|*.mdb|文本文件|*.txt|所有文件|*.*”通过FileName属性获取选定的文件名。

常用对话框控件属性及方法表属性 说明Copies 要打印的份数FromPage 打印的起始页ToPage 打印的结束页Hdc 选定打印机的设备上下文方法 说明ShowOpen 打开ShowSave 另存为ShowColor 颜色ShowFont 字体ShowPrinter 打印ShowHelp 调用Windows “帮助”例:打开文件对话框的命令如下:dim filename1 As StringDialog1.showopen 显示打开文件对话框Filename1= Dialog1.filename 获取所选择的文件名例:打开保存文件对话框的命令如下:dim filename1 As StringDialog1.showsave 显示保存文件对话框Filename1=Dialog1.filename 获取所选择的文件名 其它几种对话框的打开方式与上面的方法相同,值得一提的是可以通过该控件控制打印机的使用,非常方便。

窗体报表操作题答案

窗体报表操作题答案

窗体报表操作题答案(总2页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除第5章窗体窗体1-5:2、4、10、16、71 窗体6-10:2、3、18、32、35窗体11-15:47、53、56、59、62 窗体16-20:70、72、107、109、130 Access窗体操作题代码中常用的属性:标题 Caption ;前景色 foreColor ;是否可用 Enabled ;记录源RecordSource4、(5)设置命令按钮bTest的单击事件属性为给定的宏对象m1;本题直接选择事件,运行宏m1如果要求写入运行宏的代码就为:docmd.runmacro “宏名称”即:docmd.runmacro “m1”35、(5)设置所建命令按钮bC的单击事件,使用户单击该命令按钮后,CDID标签的显示颜色改为红色。

要求用VBA代码实现。

属性设置为:对象名.属性名=值窗体为:form.属性名=值如:form.caption=time() 也可以:me.caption=time()本题是将CDID文本框所带标签改变颜色: CDID_标签.forecolor=vbred 或 CDID_标签.forecolor=rgb(255,0,0)53、(1)将窗体"fEmp"上文本框"tSS"更改为组合框类型,保持控件名称不变。

设置其相关属性实现下拉列表形式输入性别"男"和"女";选择文本框右键,选择更改为组合框,在属性窗口设置属性行来源:男;女(不要选择控件来源),行来源类型:值列表。

(2)修改查询对象"qEmp"为参数查询,参数为引用窗体对象"fEmp"上文本框"tSS"的输入值;在查询qemp的设计视图下:添加性别字段,在条件行输入:[forms]![femp]![tss]。

VB连接Access数据库的两种方法

VB连接Access数据库的两种方法

VB连接Access数据库的两种方法首先有一点要注意,数据库的使用与我们以往所使用的文本文件不同.例如我们使用文本文件,来记录各种有用的数据.那么大致有以下几步: 读取文件-- 格式化数据-- 关闭文件-- 使用数据如果数据量较大,需要进行筛选,且存放数据的源文件可能不定时变更,那么我们可以用一个临时文件来存放有用的数据,这样可大大提高程序的效率.要[格式化数据]时,我们首先要进行筛选,然后还得进行分类,这样文件中的字符串才能被转换成有用的信息来供程序使用.这样一来,不用说,处理速度将大大减慢,而且就算你设计的数据格式比较科学,当数据量非常大时,文件的容量也会变的让普通计算机无法承受.相对文本文件来说数据库的使用也大致分为以下几步:打开数据库-- 查找数据-- 使用数据-- 关闭数据库从中可以看出,里面少了一步格式化数据,因为数据库本身在存储数据时,它就是按照一定的格式来进行存储的.其次是,数据库与文本文件返回数据的方法不同.如果把文本文件比作一个Textbox 的话,那么数据库更像是一个ListBox.使用文本文件时我们需要从整个Textbox中取出有用的信息,并进行处理,而Listbox则可以根据需要返回特定的某一项.由于VB本身并不带有可以访问数据库的类,所以我们需要引用一个包含能访问数据库的类来使用数据库.这里我们采用ADODB,相比DAO和能访问数据库的API来说,它比DAO更灵活,更强大;而比起API,它更简单易用,更适合初学者.而Access数据库比起SQL,也相对简单了很多,且能够满足中小型应用程序的需要,所以我们在使用数据库时,选择了Access.就像使用文本文件来存储数据一样,我们需要先设计好数据结构,只不过在设计Access数据库的结构时,我们需要用到其它的程序来进行详细的规划.建议采用的程序是office中的Access或V B自带的VISDATA.当数据库设计好了以后,我们可以开始"数据库编程"了.首先,我们需要引用ADO.具体的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Da ta Object *.* Library",这里的"*.*"是指的时ADO的版本号,一般来说,应用程序或ActiveX 控件都具有向下兼容性,所以我们尽可能选择比较新的版本.以确保程序在能识别旧版本Access 的同时,也能识别较新版本的Access.然后我们需要在程序中创建一个对象.就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,我们才能够访问数据库.常用的对象有两个,Connection和Records et.创建这两个对象的具体方法是:1.在引用后,使用New关键字,如Private Conn As New ADODB.ConnectionPrivate Reco As New ADODB.Recordset2.在没引用时,用CreateObject创建对象:Dim Conn,RecoSet Conn =CreateObject("ADODB.Connection")Set Reco =CreateObject("ADODB.Recordset")创建了对象之后,下一步我们要做的就是打开数据库了.先看下面的代码,可以成功的打开数据库.Conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Main.mdb"这句代码打开了D盘中的Main.mdb这个数据库.Connection.Open方法的第一个参数是连接代码,它将传递给系统的数据库引擎.前半部分"Provider=Microsoft.Jet.OLEDB.4.0",它表示了数据库的类型.不同的数据库可能会不同.后半句"Source=d:\main.mdb"它表示了数据库所在的绝对路径.打开数据库之后,还要打开表.假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码.那么看以下代码.1.想返回"Users"中,[用户名]为"去年烟花"的[密码]Recordset.open "Select 密码From Users Where 用户名='去年烟花'",Connection,1, 1之后我们就可以把用户输入的密码进行比较,看是否允许登录.If Recordset.eof and Recordset.bof thenMsgbox "用户不存在!",16ElseIf PassWord =Recordset("密码").value thenmsgbox "登录成功!",64Elsemsgbox "密码错误!",32End IfEnd IfRecordset.Close2.假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来Recordset.open "Select * From Users",Connection,1,1这时,表已经被打开,我们就用以下代码把它显示出来.Do whlie Not Recordset.eofPrint "用户名: " & Recordset("用户名").value & "密码: " & Recordset("密码").valueRecordset.MoveNextLoopRecordset.Close由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有.第一个参数是SQL语句.Select [字段名] From表名[Where 条件]这里的条件可以省略.且字段名也可以用"*"来代替所有字段.需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中.因为(1)里并没有打开[用户名]字段,所以这一句Recordset("密码")就没有值存在,还有可能出错.后面的条件,可以用"="、">"、"<"等运算符.比如"Where ID >32".(这里假设[ID]为数字型.)这是打开的部分.第二个很重要的部分就是查询记录.数据库它并不是把所有记录全部放到一个变量中备用的.而是以"当前记录"的形式来返回一个值.所以我们想从中找到有用的信息,就必须要对信息进行定位/筛选.定位:移动到下一条Recordset.MoveNext移动到上一条Recordset.MovePrevious移动到最后一条Recordset.MoveLast移动到第一条Recordset.MoveFrist移动到某一条Recordset.Move Number筛选:Recordset.Find "条件"如:[用方法(2)打开表之后]Private Sub Command1_Click()Recordset.Find "用户名=" & "text1.text"If Recordset.Eof <> True ThenMsgbox "该用户的密码是:" & Recordset("密码").value,64ElseMsgbox "未找到该用户的资料!",16End IfEnd SubMoveNext 只有当Eof不为True时,才可用,否则发生错误.而MovePrevious刚是Bof不为T rue时....而只要Eof 和Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用.Find 方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的.当在已打开的记录集中,找不到该记录时,Eof为True.找到则当前的值就是符合条件的记录.第三个部分就是添加/修改记录.修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了.比如:[(修改密码)按方法(1)打开表之后]Recordset("密码").value = "123456"Recordset.Updata需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效.而添加记录则可以用以下代码来实现:Recordset.addnewRecordset("用户名").value ="Admin"Recordset("密码").value = "Admin"Recordset.Updata这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法.到这里就差不多了,最后说一下上面提到的几个方法.Recordset.Open SQL语句,数据源,游标类型,打开方法SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据数据源就是一个打开之后的Connection对象.去他妈的游标类型,填1就可以了[偷笑ing]打开方法对应了几个常数,具体哪几个可以从对象浏览器里看.对应数值的意义:1 只读2 独占3 可写4 自已可写,别人可读Connection.open 连接代码,服务器用户名,密码这里的连接代码就不在多说了,服务器用户名,密码只有在连接远程数据库时才用到.VB如何连接access数据库2009年07月25日星期六下午 07:07VB如何连接access数据库?最近在学习VB,正在研究当中!今天告诉大家VB连接数据库的方法,我知道的有两种:一种是在adodc1的属性里设置数据库文件的路径,这种方法的优点是简单易操作,缺点是,当源文件换了地方后,要重新设置数据库的路径,否则连接不上数据库了。

Access常见错误及解决方案

Access常见错误及解决方案

Access常见错误及解决方案A c c e s s常见错误及解决方案1. 为什么在创建自定义应用程序时,会出现以下错误提示?若出现该对话框,可能是在【自定义Web应用程序】对话框的【Web位置】文本框没有输入地址,或者Access无法识别输入的网站。

注意系统要求输入的地址必须为有效的,而且用户对其有“完全控制”的权限。

2. 删除某个表对象时,为何出现以下提示?删除表对象之前,需确保已经删除该表与其他的表建立的表关系,否则会弹出该提示框。

Access的这种机制主要用来保护数据库的完整性。

3. 运行追加查询时,为何有时会收到这样一条错误消息:“Microsoft Access不能在追加查询中追加所有记录。

”?此错误消息可能由以下原因之一引起:⑴类型转换失败。

用户可能试图将一种类型的数据追加到另一种类型的字段。

例如,将文本追加到数据类型设置为“数字”的字段就会导致出现此错误。

检查目标表中字段的数据类型,然后确保在每个字段中追加正确类型的数据。

⑵键冲突。

用户可能试图将数据追加到属于表主键的一个或多个字段,例如ID字段。

检查目标表的设计,查看主键(或任何索引)的“无重复”属性是否已设置为“是”,然后检查要追加的数据以确保未违反目标表的规则。

⑶锁定冲突。

如果目标表在“设计”视图中打开或由网络上另一个用户打开,这可能导致记录锁定,致使查询无法追加记录。

确保所有人关闭了数据库。

⑷验证规则冲突。

检查目标表的设计,查看存在哪些验证规则。

例如,如果某个字段为必填字段,但用户的查询并未为其提供数据,将会出现错误。

此外,检查目标表中是否存在任何将“允许空字符串”属性设置为“否”的文本字段。

如果查询未向此类字段追加任何字符,将会出现错误。

还有其他的验证规则也可能导致问题,例如,“数量”字段可能存在以下验证规则:>=10。

在此情况下,无法追加数量小于10的记录。

4. 在执行删除查询时,为什么有时会出现这样一条错误消息:“无法从指定的数据表中删除”?若在删除查询中包含多个数据表,而“唯一的记录”属性被设置为否,就会出现此错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Access97的报表解决方案利用OLE自动化解决ACESS97中文版报表生成器直线不能往下顺延的缺陷ACCESS97 是一个非常优秀的数据库软件, 它不仅能充当办公自动化的桌面数据管理工具, 也是一个开发Client/Server 产品的优秀前端开发工具. 它的特点是易学易用、工具丰富、不需写大量代码就可以在很短的时间内开发出界面优美且功能强大的系统,长期以来受到广大开发者的青睐。

但笔者在使用时发现其报表生成器中有一个明显不适合我国国情的缺陷,就是当设置报表DETAIL 节上的字段长度因为横向空间不够而设为自动向下顺延(Can Grow 属性为True)时,如果字段旁有竖线(国内大部分公文报表都有竖线,而国外则很少有),则竖线不能和字段一起向下顺延。

使整个报表看起来不美观。

这个缺陷在ACCESS2.0 和ACCESS97 中文版上都有, 而在FoxPro2.5B/3.0/5.0 下却没有。

据微软技术服务部的工作人员说是由于本地化时测试不够原因所致。

为此,笔者在ACCESS 内采用了OLE 自动化!方法,将ACCESS97 查询生成的表送交EXCEL97 进行处理(分类汇总、打印、预演),较好地解决了这个问题。

由于ACCESS97 和EXCEL97 的VBA 在97 版本上几乎完全兼容,在EXCEL97 下录制的宏代码只需在ACCESS 下稍加修改就行了,所以采用此方法和用内部报表生成器设计所用的时间差不多。

整个工作需要下面几步:在EXCEL97 下设计好报表的样式,包括表头、页眉、页码等,对需要自动翻转的列,在" 单元格格式设置" 下设为" 自动换行"。

在EXCEL97 下录制好当数据送入后进行的操作宏(如分类汇总、加边框线,加空行、打印输出、预演等动作)。

在ACCESS 下用VBA 语句和DAO 对象的方法将数据送入EXCEL 表内,并将EXCEL 下宏操作变成ACCESS 下的语句。

以下是ACCESS97 下的程序代码,实际应用程序界面是一个对话框屏幕(FORM), 上面有五个下拉框(Comb_) 和一个文字框(Text), 由用户选择相应的信息,然后用户按" 确定" 命令按钮执行程序。

其中有些属性和方法在ACCESS2.0 下不能使用, 可采用相应的语句.Private Sub 确认_Click()On Error GoTo ErrorHandlerDim stDocName As StringDim k As IntegerstDocName = "Pqry_YEAR"DoCmd.OpenQuery stDocName ' 从原始表内根据用户输入的信息条件运行" 生成表查询", 生成一个供打印用的表.' 增加空记录处理-- 为了保证记录数少时也打印整张表.If Val(Me![Comb 空行]) > 0 Then ' 如果用户输入了大于0 的数值, 表示加空行For k = 1 To Val(Me![Comb 空行])CurrentDb.Execute "INSERT INTO Pqry_YEAR( 项目类) VALUES (' 空行空行空行');"Next kEnd IfDim msgVar As Integer' 定义EXCEL 对象变量'------------------------------Dim xlobj As ObjectDim xlsheetobj As ObjectDim xlrange As Object'------------------------------' 定义ACESS 记录集对象变量Dim dbs As Database, rst As RecordsetDim strSQL As StringDim recTotal, fieldTotal As Integer ' recTotal:表示该表内记录总数;fieldTotal 表示字段总数Dim i, j As Integeri = 0j = 0' Return reference to current database.Set dbs = CurrentDb ' 当前数据库Set rst = dbs.OpenRecordset("Pqry_YEAR ") ' 选择记录集recTotal = rst.RecordCount ' 得出记录数fieldTotal = rst.Fields.Count ' 得出字段数'----------------------------------' 建立EXCEL 对象Set xlobj = CreateObject("Excel.Application.8")' 打开设计好的EXCEL 表--REPORT.XLSxlobj.Workbooks.Open FileName:=pPathname & " REPORT.xls"Set xlsheetobj = xlobj.ActiveWorkbook.Worksheets("REPORT ")' 指向工作表' 如果是改动过的表, 不再打开If MsgBox(" 当前打印表格文件中已有数据,是否需要更新?"& Chr(13) & _" 提示: 只有对数据进行改动后, 才需要更新.", 68)= vbYes ThenDoCmd.Hourglass True ' 由于时间较长,将鼠标设为沙漏形状xlsheetobj.Rows("5:200").Select ' 选定区域xlobj.Selection.Delete Shift:=-4162 '注意! 原录制宏中-4162 为xlnone, 是EXCEL97 的常量, 但在ACCESS 下却不认, 只能到EXCEL 下的对象浏览器去查询对应的常数.' 开始向EXCEL 传送数据Do Until rst.EOFFor j = 1 To fieldTotalxlsheetobj.cells(5 + i, j).Value = rst.Fields(j - 1)Next jrst.MoveNexti = i + 1Looprst.Close'在EXCEL中调整,具体常数参见EXCEL下的对象浏览器xlsheetobj.Range("A4:Q" & Trim(Str(recTotal + 4))).Select ' 选定范围'以下为设置边框线录制的宏代码,已删除了相似的语句.xlobj.Selection.Borders(5).LineStyle = -4142xlobj.Selection.Borders(6).LineStyle = -4142With xlobj.Selection.Borders(7).LineStyle = 1.Weight = -4138.ColorIndex = -4105End WithWith xlobj.Selection' 确定是合计在表上还是在表尾If Me![Fram 位置] = 1 Then.Subtotal GroupBy:=2, Function:=-4157,TotalList:=Array(6, 9, 10, _11, 12, 13, 14, 15, 16), Replace:=True,PageBreaks:=False, _SummaryBelowData:=FalseElse.Subtotal GroupBy:=2, Function:=-4157,TotalList:=Array(6, 9, 10, _11, 12, 13, 14, 15, 16), Replace:=True,PageBreaks:=False, _SummaryBelowData:=TrueEnd IfEnd With' 根据用户的选择设置页眉和页尾。

With xlsheetobj.PageSetup.LeftHeader = "" & Chr(10) & "" & Chr(10) & "" & Mid(Me![Cmbo 单位], 4).CenterHeader = "&"" 宋体, 加粗""&18 " & Me![Cmbo 年度] & " 年" & Mid(Me![Cmbo 类别], 4) & "XXX 表"End Withxlsheetobj.Range("A1").Select' 将空行内容清掉k = Val(Me![Comb 空行])If Val(Me![Comb 空行]) > 0 ThenDim content As Stringi = 5content = xlsheetobj.cells(i, 2).formulaR1C1Do While InStr(1, content, " 空行空行空行") = 0i = i + 1content = xlsheetobj.cells(i, 2).formulaR1C1Loopxlsheetobj.Range("B" & Trim(Str(i - k + 5)) & ":" & "Q"& Trim(Str(i + 5))).Selectxlobj.Selection.ClearContentsxlsheetobj.Range("A1").SelectEnd IfElse ' 不更新xlsheetobj.ActivateEnd Ifxlobj.ActiveWindow.SelectedSheets.PrintPreview ' 预演报表' 如为打印:xlobj.ActiveWindow.SelectedSheets.PrintOutDoCmd.Hourglass False ' 恢复鼠标形状xlobj.Visible = True ' 让EXCEL 可见清除对象变量空间,节省内存Set dbs = NothingSet xlobj = Nothingxlobj.quit ' 关闭EXCELExit SubErrorHandler: ' 出错处理DoCmd.Hourglass FalseMsgBox "Error number " & Err.Number & ": " & Err.Description' Resume with statement following occurrence of error.Resume NextEnd Sub通过这个例子我们看到在OFFICE97 下利用OLE 自动化扩展应用程序的功能是多么方便和强大。

用EXCEL 完成的报表的优点是格式美观, 修改方便. 缺点是第一次生成EXCEL 表格时速度较慢.本例是用EXCEL 对数据进行报表操作, 其实也可参照此例的方法在EXCEL 上建立图形统计、财务分析、数据透视表分析等应用程序,只要在EXCEL 下录制相应的宏,再加到ACCESS 下就行了。

相关文档
最新文档