IFIX报表ODBC制作
IFIX报表常规做法是采用IFIX内嵌的VBA语言,借助于OFFICE自带的ACCESS和EXCEL 来实现的。
例如,在IFIX画面上通过点击一按钮来察看某一天的数据,假如这有N个模拟量如:
Y0GCK14CP101, Y0GCK13CP101, Y0GCQ11CF101,Y0GCC10CP101等数据间隔一小时归一次档。
一 Access数据库(表)简介access数据库生成网页版
创建一个ACCESS数据库如ReportDataBase.mdb,用来存放报表所需的数据。IFIX 以一定的时间间隔将数据写入此数据库预先创建的表中如ReportData。
ReportData的结构如下:
字段名 数据类型
日期 日期/时间 数值(整小时,此时间用来排序)
时间 数值
Y0GCK14CP101 数值
Y0GCK13CP101 数值
Y0GCQ11CF101 数值
……………… 数值
注意:
1 修改字段名时,在设计视图里将原来的字段ID做修改后,日期字段名的索引必须设置成无,否则IFIX将报错:[Microsoft][ODBC Microsoft Access Driver] 由于将在索引,主关键字,或关系中创建重复的值,请求对表的改变没有成功。
改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值可防止以上错误发生;
2 打开Access表Reportdata,右键单击,选择设计视图,弹出的下拉选项中选择字段大小或数据类型,日期选择:短日期,时间选择:长整型,用户自定义的标签类型选择:双精度。如下图示
二 建立ODBC数据源
创建ODBC数据源。控制面板->管理工具->ODBC数据源,打开ODBC数据源管理器,建立一个“系统DSN”,点击“添加”,双击“Microsoft Access Drivers (*.mdb)”,出现“ODBC Microsoft Access 安装”对话框。
数据源名:ReportSource 注意数据源名字后面会用到
数据库: ReportDataBase.mdb,点击‘选择‘按钮选择创建的Access数据库。
点击“完成”,退出控制面板。如下图示
三 建立IFIX时间调度
在IFIX 中创建一个“基于时间的调度”,如下图示
名称:任意合法的字符组合
触发信息:连续
间隔:1小时
详细代码如下:
点击“VB编辑器“进入VB编辑器
在“工具”菜单-〉引用“Microsoft ActiveX Data Objects 2.7 Library”
Private Sub ReportTime_OnTimeOut(ByVal lTimerId As Long)
Dim cn As ADODB.Connection '定义一个ADO方式的数据库连接
Dim res As ADODB.Recordset '定义一个ADO方式的数据库记录集
Dim StrSQL As String
Set cn = New ADODB.Connection '定义cn为新的ADO数据库连接
Set res = New ADODB.Recordset '定义res为新的ADO数据库连接集
'On Error Resume Next
cn.ConnectionString = "DSN=ReportSource;UID=;PWD=;" '定义cn的连接数据源为ReportSource 即ODBC中建立的ACCESS的数据源名
cn.Open
StrSQL = "select * from ReportData Where 日期=#" & Date & "#" '使用SQL语句查ReportData表中日期为Date的数据
res.Open StrSQL, cn, adOpenKeyset, adLockOptimistic
res.AddNew '添加一个新的记录
res.Fields(0) = Date '在0列加入日期
res.Fields(1) = Hour(Time) '在1列加入时间
res.Fields(2) = Fix32.SERVER1.BMW_Y0GCK14_CP101.f_cv
res.Fields(3) = Fix32.SERVER1.BMW_Y0GCK13_CP101.f_cv
res.Fields(4) = Fix32.SERVER1.BMW_Y0GCQ11_CF101.f_cv
res.Fields(5) = Fix32.SERVER1.BMW_Y0GCC10_CP101.f_cv
res.Fields(6) = Fix32.SERVER1.BMW_Y0GCN10_CL501.f_cv
res.Fields(7) = Fix32.SERVER1.BMW_Y0GCB21_CF101.f_cv
res.Fields(8) = Fix32.SERVER1.BMW_Y0GCB21_CP101.f_cv
res.Fields(9) = Fix32.SERVER1.BMW_Y0GCB22_CF101.f_cv
res.Fields(10) = Fix32.SERVER1.BMW_Y0GCB22_CP101.f_cv
res.Fields(11) = Fix32.SERVER1.BMW_Y0GCB23_CF101.f_cv
res.Fields(12) = Fix32.SERVER1.IWW_Y0GNL20_CP101.f_cv
res.Fields(13) = Fix32.SERVER1.IWW_Y0GNL11_CL101.f_cv
res.Fields(14) = Fix32.SERVER1.IWW_Y0GNL12_CL101.f_cv
res.Fields(15) = Fix32.SERVER1.IWW_Y0GNL13_CL101.f_cv
res.Fields(16) = Fix32.SERVER1.IWW_Y0GND63_CP101.f_cv
res.Fields(17) = Fix32.SERVER1.IWW_Y0GND60_CL101.f_cv
res.Fields(18) = Fix32.SERVER1.IWW_Y0GNS20_CP101.f_cv
res.Fields(19) = Fix32.SERVER1.IWW_Y0GNC13_CP101.f_cv
res.Fields(20) = Fix32.SERVER1.IWW_Y0GNN30_CL101.f_cv
res.Fields(21) = Fix32.SERVER1.IWW_Y0GNN30_CL102.f_cv
res.Update '保存记录 Update(当Edit或AddNew方法完成后保存记录集)
res.Close '关闭记录集
cn.Close
Set res = Nothing
Set cn = Nothing
End Sub
四 报表生成
在IFIX画面上插入一个按钮。
按钮名称:CommandButton1
报表生成按钮代码如下:
Private Sub CommandButton1_Click()
'On Error Resume Next
Dim cn As ADODB.Connection
Dim res As ADODB.Recordset
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlsheet1 As Excel.Worksheet
Dim xlsheet2 As Excel.Worksheet
Dim strFileName As String
Dim StrSQL As String
Dim i As Integer
Dim row As Integer
Dim CreatDayReport As Boolean
WebBrowser.Navigate "E:\空报表.htm"
strFileName = "E:\ReportView.htm" '预先设计的报表显示模板文件,存放路径C:\Documents and Settings\Administrator\桌面 实际看工程存放路径这里是测试
StrSQL = "select * from ReportData where 日期=#" & Calendar.Value & "#" '使用SQL语句查询Calendar日历上日期的数据
If Dir(strFileName) = "" Then '判断文件是否存在,不存在则退出
MsgBox "报表模版文件不存在"
Exit Sub
End If
Set cn = New ADODB.Connection '新建连接
cn.ConnectionString = "DSN=ReportSource;UID=;PWD=;" '连接到ReportSource数据源
cn.Open '打开连接
Set res = New ADODB.Recordset '新建记录集
res.Open StrSQL, cn, adOpenKeyset, adLockOptimistic
If res.RecordCount <= 0 Then 'RecordCount 记录集中记录的数量。若无法判断记录条数则返回-1
MsgBox "你要查询的数据不存在,可能已被删除", vbInformation + vbOKOnly, "系统提示"
res.Close
Set res = Nothing
cn.Close
Set cn = Nothing
Exit Sub
Else
res.MoveFirst '将记录指针移动到第一行
Set xlApp = New Excel.Application '新建Excel
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论