Access97的报表解决方案

2016-02-19 12:52 8 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的Access97的报表解决方案,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

利用OLE自动化解决ACESS97中文版报表生成器直线不能往下顺延的缺陷
  
  ACCESS97是一个非常优秀的数据库软件,它不仅能充当办公自动化的桌面数据管理工具,也是一个开发Client/Server产品的优秀前端开发工具.它的特点是易学易用、工具丰富、不需写大量代码就可以在很短的时间内开发出界面优美且功能强大的系统,长期以来受到广大开发者的青睐。但笔者在使用时发现其报表生成器中有一个明显不适合我国国情的缺陷,就是当设置报表DETAIL节上的字段长度因为横向空间不够而设为自动向下顺延(CanGrow属性为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下不能使用,可采用相应的语句.
  PrivateSub确认_Click()
  OnErrorGoToErrorHandler
  DimstDocNameAsString
  DimkAsInteger
  stDocName="Pqry_YEAR"
  DoCmd.OpenQuerystDocName'从原始表内根据用户输入的信息条件运行"生成表查询",生成一个供打印用的表.
  '增加空记录处理--为了保证记录数少时也打印整张表.
  
  
  IfVal(Me![Comb空行])0Then'如果用户输入了大于0的数值,表示加空行
  
  
  Fork=1ToVal(Me![Comb空行])
  CurrentDb.Execute"INSERTINTOPqry_YEAR
  (项目类)VALUES('空行空行空行');"
  Nextk
  EndIf
  DimmsgVarAsInteger
  '定义EXCEL对象变量
  '------------------------------
  DimxlobjAsObject
  DimxlsheetobjAsObject
  DimxlrangeAsObject
  '------------------------------
  '定义ACESS记录集对象变量
  DimdbsAsDatabase,rstAsRecordset
  DimstrSQLAsString
  DimrecTotal,fieldTotalAsInteger'recTotal:
  表示该表内记录总数;
  fieldTotal表示字段总数
  Dimi,jAsInteger
  i=0
  j=0
  'Returnreferencetocurrentdatabase.
  Setdbs=CurrentDb'当前数据库
  Setrst=dbs.OpenRecordset("Pqry_YEAR")'选择记录集
  recTotal=rst.RecordCount'得出记录数
  fieldTotal=rst.Fields.Count'得出字段数
  '----------------------------------
  '建立EXCEL对象
  Setxlobj=CreateObject("Excel.Application.8")
  '打开设计好的EXCEL表--REPORT.XLS
  xlobj.Workbooks.OpenFileName:=pPathname&"REPORT.xls"
  Setxlsheetobj=xlobj.ActiveWorkbook.Worksheets("REPORT")
  '指向工作表
  '如果是改动过的表,不再打开
  IfMsgBox("当前打印表格文件中已有数据,
  是否需要更新?"
  &Chr(13)&_
  "提示:只有对数据进行改动后,才需要更新.",68)
  =vbYesThen
  DoCmd.HourglassTrue'由于时间较长,
  将鼠标设为沙漏形状
  xlsheetobj.Rows("5:200").Select'选定区域
  xlobj.Selection.DeleteShift:=-4162'
  注意!原录制宏中-4162为xlnone,是EXCEL97的常量,但在ACCESS下却不认,只能到EXCEL下的对象浏览器去查询对应的常数.
  '开始向EXCEL传送数据
  DoUntilrst.EOF
  Forj=1TofieldTotal
  xlsheetobj.cells(5 i,j).Value=rst.Fields(j-1)
  Nextj
  rst.MoveNext
  i=i 1
  Loop
  rst.Close
  
  '在EXCEL中调整,具体常数参见EXCEL下的对象浏览器
  xlsheetobj.Range("A4:Q"&Trim(Str(recTotal 4))).
  Select'选定范围
  '以下为设置边框线录制的宏代码,已删除了相似的语句.
  xlobj.Selection.Borders(5).LineStyle=-4142
  xlobj.Selection.Borders(6).LineStyle=-4142
  Withxlobj.Selection.Borders(7)
  .LineStyle=1
  .Weight=-4138
  .ColorIndex=-4105
  EndWith
  
  Withxlobj.Selection
  '确定是合计在表上还是在表尾
  IfMe![Fram位置]=1Then
  .SubtotalGroupBy:=2,Function:=-4157,
  TotalList:=Array(6,9,10,_
  11,12,13,14,15,16),Replace:=True,
  PageBreaks:=False,_
  SummaryBelowData:=False
  Else
  .SubtotalGroupBy:=2,Function:=-4157,
  TotalList:=Array
  (6,9,10,_
  11,12,13,14,15,16),Replace:=True,
  PageBreaks:=False,_
  SummaryBelowData:=True
  EndIf
  EndWith
  '根据用户的选择设置页眉和页尾。
  Withxlsheetobj.PageSetup
  .LeftHeader=""&Chr(10)&""&Chr(10)&"
  "&Mid(Me![Cmbo单位],4)
  .CenterHeader="&""宋体,加粗""&18"&Me!
  [Cmbo年度]&"年"&Mid(Me![Cmbo类别],4)&"XXX表"
  EndWith
  xlsheetobj.Range("A1").Select
  '将空行内容清掉
  k=Val(Me![Comb空行])
  IfVal(Me![Comb空行])0Then
  DimcontentAsString
  i=5
  content=xlsheetobj.cells(i,2).formulaR1C1
  DoWhileInStr(1,content,"空行空行空行")=0
  i=i 1
  content=xlsheetobj.cells(i,2).formulaR1C1
  Loop
  xlsheetobj.Range("B"&Trim(Str(i-k 5))&":"&"Q"
  &Trim(Str(i 5))).Select
  xlobj.Selection.ClearContents
  xlsheetobj.Range("A1").Select
  EndIf
  
  Else'不更新
  xlsheetobj.Activate
  EndIf
  xlobj.ActiveWindow.SelectedSheets.PrintPreview'预演报表
  '如为打印:xlobj.ActiveWindow.SelectedSheets.PrintOut
  DoCmd.HourglassFalse'恢复鼠标形状
  xlobj.Visible=True'让EXCEL可见
  清除对象变量空间,节省内存
  Setdbs=Nothing
  Setxlobj=Nothing
  xlobj.quit'关闭EXCEL
  ExitSub
  ErrorHandler:'出错处理
  DoCmd.HourglassFalse
  MsgBox"Errornumber"&Err.Number&":"&Err.Description
  'Resumewithstatementfollowingoccurrenceoferror.
  ResumeNext
  EndSub
  通过这个例子我们看到在OFFICE97下利用OLE自动化扩展应用程序的功能是多么方便和强大。用EXCEL完成的报表的优点是格式美观,修改方便.缺点是第一次生成EXCEL表格时速度较慢.
  本例是用EXCEL对数据进行报表操作,其实也可参照此例的方法在EXCEL上建立图形统计、财务分析、数据透视表分析等应用程序,只要在EXCEL下录制相应的宏,再加到ACCESS下就行了。->

来源:http://www.tulaoshi.com/n/20160219/1602278.html

延伸阅读
一:直接把MDB(MDE)文件放到网络中的共享目录中,在客户端做好对应的快捷方式 二:数据库折分(菜单:工具,实用工具,折分)成前后台,把后台放在一个共享目录中,然后前台文件就可以分发给每个用户了。 三:也是使用拆分成前后台,后台升迁至SQL SERVER数据库,然后建立ODBC,并重新做好链接表。 四:升迁至ADP。
标签: 电脑入门
当您尝试运行 Windows Server 2003、 Windows XP、 Windows 2000 或 Windows NT 4.0 的计算机中注销时,可能会遇到下列症状: 1、备份可能无法启动。从备份程序的应用程序日志中有错。但是,如果您看到事件 ID 1524,备份已运行。 2、当您尝试在 Windows 2000 中注销时,很长的时间,将显示"正在保存设置..."消息,Windows 会停止...
标签: windows 操作系统
Windows Installer(windows安装服务)是一种通用的软件发布方式,现在许多软件都使用windows Installer作为自己的安装程序,有时因为各种原因以及windows Installer本身的缺陷,会导致windows Installer出错。 症状一:删除某个程序后,在运行某些软件时,老会弹出一个“windows正在配置Windows Installer,请稍候”的窗口。 ...
标签: ASP
  "ASP 0115"是什么错误? 如果你的ASP报告0115 error,意思是“我不知道是什么原因引起这个错误” 0115 error引起的原因一般是由外部因素引起的。 在下面我列出了一些可能引起报0115 error的东东,并且也提出了一些供参考的解决办法: 1.文件或注册键的权限和证明引起 如果系统授权用户对一些自建组件,系统动态链接库(DLL)...
标签: 皮肤护理
问答 图钉提问: 检查所见:肝脏大小形态正常,包膜光滑,内管纹理走向正常,实质回声分布均匀,门脉主干内径小于12mm,肝内外胆管未见增宽. 胆囊切面大小形态正常,壁毛糙,增厚,约三毫米,于胆囊颈部见一强回声光团,大小约6.4乘3mm,后伴声影,并随体位改变而移动,余囊腔内透声好,内未见局限性异常回声.胆内总管内径大于5mm. 胰腺切面大小正常,胰...

经验教程

995

收藏

99
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部