ifix报表制作文档教学内容.docx
《ifix报表制作文档教学内容.docx》由会员分享,可在线阅读,更多相关《ifix报表制作文档教学内容.docx(14页珍藏版)》请在冰豆网上搜索。
![ifix报表制作文档教学内容.docx](https://file1.bdocx.com/fileroot1/2023-1/31/de3ced31-da3d-4ebb-8e59-677699848ad2/de3ced31-da3d-4ebb-8e59-677699848ad21.gif)
ifix报表制作文档教学内容
Ifix报表的实现
本文档主要介绍Ifix通过调度将报表数据按照一定要求存储到Access数据库中,并根据要求从其中提取数据,结合EXCELL的制表功能实现报表。
数据存入
1.数据库的建立和数据关联
方法:
(1)直接在Microsoftoffice中建立Access文件。
(2)在控制面板里ODBC数据源管理器里关联数据库时创建Access数据库。
1.1数据库的建立
(1)打开新建的Access文件,点击。
(2)创建一个,名字为ReportData的表。
在表名处右键鼠标点击
设计视图
,将字段名称,数据类型,字段属性更改为下图所示:
1.2数据库的关联
按照开始→设置→控制面板→管理工具→数据源的操作顺序进入数据库引用关联定义画面如下图。
在其中选择点击SystemDSN,再点击ADD…命令,在弹出的选择列表中选择MicrosoftAccessDriver[*.mdb],再点击完成按钮,进入下边的窗口,
在其中的数据源名(N)后的输入区中填写一个名字,然后在数据库栏中点击选择(S)按钮,选择刚才定义的数据库文件名即可。
在以后的应用中只使用DSN(数据源名)名,不使用数据名。
2.时间调度的建立
2.1在ifix里新建基于时间的调度,在Schedules新建一个调度文件,在TimeBasedEntries中创建一个调度,具体设置如下图:
注意:
iFIX不支持使用与本地节点名相同名称的调度。
因此,不能创建与本地节点名相同的调度。
触发信息设置为continuous,间隔为1个小时,启动时间为第2分钟。
点击VbEditor将以下脚本写入
PrivateSubRW2REPORT_OnTimeOut(ByVallTimerIdAsLong)
DimcnAsADODB.Connection'定义一个ADO方式的数据库连接
DimresAsADODB.Recordset'定义一个ADO方式的数据库记录集
DimStrSQLAsString
Setcn=NewADODB.Connection'定义cn为新的ADO数据库连接
Setres=NewADODB.Recordset'定义res为新的ADO数据库连接集
'OnErrorResumeNext
cn.ConnectionString="DSN=ReportSource;UID=;PWD=;"'定义cn的连接数据源为ReportSource即ODBC中建立的ACCESS的数据源名
cn.Open
StrSQL="select*fromReportDataWhere日期=#"&Date&"#"'使用SQL语句查找ReportData表中日期为Date的数据
res.OpenStrSQL,cn,adOpenKeyset,adLockOptimistic
res.AddNew'添加一个新的记录
res.Fields(0)=Date'在0列加入日期
res.Fields
(1)=Hour(Time)'在1列加入时间
res.Fields
(2)=Fix32.RW2.RW_Y0GBN11AP001_ZS.f_cv'在2列加入标签1
res.Fields(3)=Fix32.RW2.RW_Y0GBN11AP002_ZS.f_cv'在3列加入标签2
res.Update'保存记录Update(当Edit或AddNew方法完成后保存记录集)
res.Close'关闭记录集
cn.Close
Setres=Nothing
Setcn=Nothing
EndSub
在vb的菜单栏点击工具→引用,添加一下控件:
2.2添加到FixBackgroundServer任务
打开SCU,点击configure→Task如图所示:
在文件名内查找FixBackgroundServer.exe文件添加后保存SCU文件。
2.3在后台任务启动列表中添加调度
点击settings→userpreferences进入如下图界面,添加后台启动项
3同时在Report画面里,添加WEB控件:
4报表生成
在IFIX画面上插入一个按钮。
按钮名称:
CommandButton1
报表生成按钮代码如下:
PrivateSubCommandButton1_Click()
'OnErrorResumeNext
DimcnAsADODB.Connection
DimresAsADODB.Recordset
DimxlAppAsExcel.Application
DimxlBookAsExcel.Workbook
Dimxlsheet1AsExcel.Worksheet
Dimxlsheet2AsExcel.Worksheet
DimstrFileNameAsString
DimStrSQLAsString
DimiAsInteger
DimrowAsInteger
DimCreatDayReportAsBoolean
WebBrowser.Navigate"E:
\空报表.htm"
strFileName="E:
\ReportView.htm"'预先设计的报表显示模板文件,存放路径C:
\DocumentsandSettings\Administrator\桌面实际看工程存放路径这里是测试
StrSQL="select*fromReportDatawhere日期=#"&Calendar.Value&"#"'使用SQL语句查询Calendar日历上日期的数据
IfDir(strFileName)=""Then'判断文件是否存在,不存在则退出
MsgBox"报表模版文件不存在"
ExitSub
EndIf
Setcn=NewADODB.Connection'新建连接
cn.ConnectionString="DSN=ReportSource;UID=;PWD=;"'连接到ReportSource数据源
cn.Open'打开连接
Setres=NewADODB.Recordset'新建记录集
res.OpenStrSQL,cn,adOpenKeyset,adLockOptimistic
Ifres.RecordCount<=0Then'RecordCount记录集中记录的数量。
若无法判断记录条数则返回-1
MsgBox"你要查询的数据不存在,可能已被删除",vbInformation+vbOKOnly,"系统提示"
res.Close
Setres=Nothing
cn.Close
Setcn=Nothing
ExitSub
Else
res.MoveFirst'将记录指针移动到第一行
SetxlApp=NewExcel.Application'新建Excel
SetxlBook=xlApp.Workbooks.Open("E:
\ReportView.htm")
'SetxlBook=GetObject(strFileName)'打开模版XLS文件
Setxlsheet1=xlBook.Worksheets
(1)
Setxlsheet2=xlBook.Worksheets
(2)
xlBook.Worksheets.Application.Visible=False'设置第一张表为可视
xlsheet1.Range("b4","g27")=""'b4列g27行清空
xlsheet2.Range("b4","g27")=""'b4列g27行清空
xlsheet1.Cells(2,"A")=CDate(res.Fields(0))'获取日期CDate转换为幼小日期
xlsheet2.Cells(2,"A")=CDate(res.Fields(0))'获取日期CDate转换为幼小日期
i=0
Whileirow=res.Fields
(1)+4'利用时间排序
xlsheet1.Cells(row,"b")=res.Fields
(2)
xlsheet1.Cells(row,"c")=res.Fields(3)
i=i+1
res.MoveNext
Wend
xlApp.DisplayAlerts=False
xlBook.SaveAs"E:
\ReportView.htm"'保存以日报表.htm格式来保存报表
xlApp.DisplayAlerts=True'将日报表显示出来
xlApp.Quit
Setxlsheet1=Nothing
Setxlsheet2=Nothing
SetxlBook=Nothing
SetxlApp=Nothing
CreatDayReport=True
IfCreatDayReport=TrueThen
WebBrowser.Navigate"e:
\ReportView.htm"
Else
WebBrowser.Navigate"e:
\空报表.htm"
EndIf
EndIf
EndSub
以上对于数据代码部分,添加的数据名称、数量要以本身项目所对数据库为基准。
5保存报表
在IFIX中插入一个按钮,
,命名为:
CommandButton2
保存报表按钮代码如下:
PrivateSubCommandButton2_Click()
DimFileNameAsString
OnErrorGoToerrHandler
DimstrReportAsString
'DimmydateAsDate
'mydate=Date
strReport="日报表"
'IfMe.DayControl=TrueThenstrReport="日报表"
'IfMe.MonthControl=TrueThenstrReport="月报表"
OnErrorResumeNext
SetxlApp=GetObject(,"Excel.Application")
IfErr.Number<>0Then
SetxlApp=CreateObject("Excel.Application")
Else
SetxlApp=GetObject(,"Excel.Application")
xlApp.ScreenUpdating=True
EndIf
Err.Clear
OnErrorGoToerrHandler
'SetxlApp=getobjece(,"excel.application")
'xlApp.ScreenUpdating=True
xlApp.DisplayAlerts=False
SetxlBook=xlApp.Workbooks.Open("E:
\ReportView.htm")
xlApp.Visible=False
'dlgSaveAs.CancelError=True
'dlgSaveAs.Flags=cdlOFNHideReadOnly
'dlgSaveAs.Filter="HTML文件(*.HTM)|*.HTM|EXCEL文件(*.xls)|*.xls"
'dlgSaveAs.FileName="C:
\DocumentsandSettings\Administrator\桌面\"&Format(Calendar.Value,"yyyy-MM-dd")&strReport&".xls"
FileName="E:
\"&Format(Calendar.Value,"yyyy-MM-dd")&strReport&".xlsx"
'dlgSaveAs.Filename=strReport
'dlgSaveAs.FilterIndex=2
'dlgSaveAs.ShowSave
'xlBook.SaveAsFilename:
=dlgSaveAs.Filename,FileFormat:
=xlNormal,Password:
="",WriteResPassword:
="",ReadOnlyRecommended:
=False,CreateBackup:
=False
xlBook.SaveAsFileName
xlApp.DisplayAlerts=True
Setxlsheet1=Nothing
Setxlsheet2=Nothing
SetxlBook=Nothing
xlApp.Quit
'xlApp.Visible=True
SetxlApp=Nothing
ExitSub
errHandler:
xlApp.DisplayAlerts=True
Setxlsheet1=Nothing
Setxlsheet2=Nothing
SetxlBook=Nothing
xlApp.Quit
'xlApp.Visible=True
SetxlApp=Nothing
MsgBox"保存出错!
"
EndSub
6报表日期查询功能添加
打开IFIX报表画面,点击工具箱TOOLBOX,单击OLE,,选择日历控件:
CalendarControl11.0;
日历控件必须初始化,初始化代码如下:
PrivateSubCFixPicture_Initialize()'对日历控件初始化
Calendar.Value=Date
EndSub
至此IFIX报表ODBC已经组态完成,若需要打印报表,则添加打印按钮:
打印按钮代码如下:
PrivateSubcmdPrint_Click()
OnErrorResumeNext
'日报页面设置
IfCalendar.Value=TrueThen
PrintSet"0.5","0.5","0.5","0.5"
EndIf
WebBrowser.ExecWB6,OLECMDEXECOPT_PROMPTUSER
EndSub
打印页面设置代码如下:
PrivateSubPrintSet(sBottomAsString,strTopAsString,sLeftAsString,sMargin_rightAsString)
Dimhkey_root,hkey_path,hkey_keyAsString
DimRegWshAsObject
hkey_root="HKEY_CURRENT_USER"
hkey_path="\Software\Microsoft\InternetExplorer\PageSetup"
'//设置网页打印的页眉页脚为空
SetRegWsh=CreateObject("WScript.Shell")
hkey_key="\header"'页眉
RegWsh.RegWritehkey_root+hkey_path+hkey_key,""
hkey_key="\footer"'页脚
RegWsh.RegWritehkey_root+hkey_path+hkey_key,""
hkey_key="\margin_bottom"'下页边距
RegWsh.RegWritehkey_root+hkey_path+hkey_key,sBottom'
hkey_key="\margin_top"'上页边距
RegWsh.RegWritehkey_root+hkey_path+hkey_key,strTop'
hkey_key="\margin_left"'左页边距
RegWsh.RegWritehkey_root+hkey_path+hkey_key,sLeft'
hkey_key="\margin_right"'右页边距
RegWsh.RegWritehkey_root+hkey_path+hkey_key,sMargin_right'
'打印
EndSub