IFIX连接SQL读写数据和制作excel报表图文教程
IFIX连接SQL数据库、制作excel报表详细教程
一、 IFIX连接SQL数据库读写数据
IFIX连接SQL数据库有多种方法,其中最为方便的两种方法是:
(1)使用IFIX本身为SQL数据库提供的接口SQT和SQD;
(2)VB+ADO。
下面分别介绍着两种方法的实现步骤。
1、使用SQT和SQD读写SQL数据库
1.1 安装SQL2008
(只列出关键步骤,其余直接点击“下一步”或“安装”) 打开SQL安装中心,点击“安装”;
SQL2008简体中文版安装包下载链接:
点击“全新SQL Server独立安装或向现有安装添加功能”;
点击“输入产品密匙”,点击“下一步”:(根据版本选择)
sql server2008密钥
Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYB
Enterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB
Microsoft SQL Server 2008 R2序列号密钥
开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM
开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8
工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6Q
WEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM
数据中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB
数据中心版64位:DDT3B-8W62X-P9JD6-8MX7M-HWK38
企业版32位:R88PF-GMCFT-KM2KR-4R7GB-43K4B
企业版64位:GYF3T-H2V88-GRPPH-HWRJP-QRTYB
标准版32位:CXTFT-74V4Y-9D48T-2DMFW-TX7CY
标准版64位:B68Q6-KK2R7-89WGB-6Q9KR-QHFDW
功能选择界面,选择安装全部功能,点击“下一步”;
进入实例配置界面,选择默认实例,点击“下一步”;
进入服务器配置界面,启动类型均选为“自动”;点击“对所有SQL Server服务使用相同的账户”,在弹出的界面中选择第一个账户,密码不用填;返回服务器配置界面点击下一步;
进入数据库引擎配置界面,选择混合模式,输入自己设定的密码,点击“添加当前用户”,点击下一步,直至安装完成,关闭安装中心。
1.2 进入SQL server新建SQL登录名和数据库
打开SQL,以Windows身份验证登录;
连接完后,点击“安全性”-“登录名”,右击选择“新建登录名”:
在弹出的界面中,点击左上角的“常规”
,输入登录名、密码,不要勾选强制密码过期,之后点
击左上角“服务器角色”;
在弹出的界面中,根据需要勾选所需权限,这里全部勾选,再点击“用户映射”;
在弹出的界面中,“映射到此登录名的用户”内勾选所有数据库,并在每个数据库的“数据库角色成员身份”中勾选db_owner和public,而后点击“确定”,完成新建登录名。
完成登录名创建后,断开当前连接或是退出SQL重新进入软件,以SQL身份验证登录,输入刚刚新建的登录名,点击“连接”;
连接后,右击“数据库”,选择“新建数据库”,以默认配置完成新建,如这里新建数据库,取名为db1。
进入db1,新建三张表,新建右击“表”,选择“新建表”,输入如下图的列名及数据类型;点击保存,输入表名为sqllib,用于保存SQL命令;
新建第二张表,列名及数据类型如下图,取名为sqlerr,用于保存各类错误:
新建第三张表,用于保存需要的工业历史数据,这里将表取名为data,添加两个列
COL1和COL2,数据类型都为float。
接下来为sqllib表添加SQL命令,这里添加一条向data表的COL1、COL2写入数据的语句,右击“abo.sqllib”,选择“编辑前200行”;写入如下图的内容,点击保存。
注:如果要读取数据库内的数据,只要将该SQL命令换成相应的select语句。
1.3 创建ODBC数据源
打开控制面板,依次点击“管理工具”-“数据源(ODBC)”,进入如下界面:
在点击“系统DSN”-点击“添加”按钮,在如下界面中选择“SQL Server”,
点击“完成”。
在以下界面中填写名称命名数据源,服务器填写自己的计算机名
(获取计算机名按照如下步骤:
右击桌面的“计算机”-选择“属性”,在弹出的界面上就可以看到),点击“下一步”;
按照下图配置,填入刚刚在SQL中新建的登陆名和密码,点击下一步;
勾选“更改默认的数据库为”,在下拉框中选择刚刚新建的数据库名,点击下一步;
直接点击“完成”按钮。
之后你可以在弹出的界面中点击“测试数据源”,若测试成功,则可以进入下一步骤。
1.4 在SCU内配置SQL
打开IFIX,点击“SCU”,进入配置界面;
在如下界面中点击“配置”-选择“SQL”,
在弹出的界面中点击“增加”按钮,填入相应信息,点击“确定”。
选中刚刚添加的SQL账户,点击“配置SQL任务”;
启用SQL支持,选择我们所创建的数据库ID,点击“确定”,完成配置。
1.5 在IFIX内创建SQT和SQD数据块
打开IFIX的数据库管理器,创建数字量输入数据块DI1,当DI1的值发生变化时就触发SQT(当然也可以采用时间事件来触发SQT,下面也会有介绍),点击界面内的“高级”标签。
进入高级标签,勾选“启用输出”和“手动”;
一般要保存到关系数据库的历史数据都是模拟量,因此本教程以模拟量为例子,将其存入SQL数据库。创建模拟量寄存器数据块AR_1和AR_2:
创建数据块SQT,在数据库管理器中新建数据块,选择SQT类型,如下图;
进入如下的界面,若要采用DI1数值变化来触发SQT,则如下图填写信息。在刚刚创建的db1数据库中,我们建立了sqllib表,并在表内添加了sqlname为cmd1,sqlcmd为“Insert into data??”这条语句。在如下界面中,SQL名填写“cmd1”,数据库ID填写“db1”(所建ODBC数据源名称),事件标签写入“DI1.F_CV”,事件类型勾选“值变化”,这样,当DI1的值变化时,SQT就会触发,找到db1数据库下的sqllib表内sqlname等于cmd1的这条语句,并执行。
在上图中的“下一块”中填写SQD_1,构成数据链,此时会弹出如下界面,点击“yes”;
创建SQD数据块,如下图填写,因为是向数据库添加数据,所以方向选为OUT。
保存数据库管理器。这样,就建立了一个DI1值变化触发的SQT和SQD。
如果我们希望以时间事件来触发SQT,应在建立SQT数据块的时候,设置触发时间,其余步骤相同。例如,我们希望每天晚上23:00至23:59这段时间内,每5分钟记录一次数据到SQL数据库,建立SQT数据块时应如下图填写:
在IFIX主界面点“应用程序”,打开“任务控制”;
验证SQL服务是否启动,如下图所示说明注册成功。
作进一步验证,在数据库管理器内更改DI1 的当前值,如将CLOSE 改为OPEN,
按 Ctrl + R, 观察到SQT_1 的当前值增加1,意味着SQT 被触发一次,打开SQL也可以发现data表增加了一行记录。
以上就是使用SQT和SQD读写SQL数据库的详细步骤。
2、使用ADO访问数据库
2.1 定时向数据库添加记录
首先,参照1.1-1.3的内容建立数据库(只需建立data表,sqllib和sqlerr不需创建),创建ODBC数据源。
打开IFIX,双击下图左下角的“数据定时写”,新建基于时间项;
假设我们要在每晚23:00自动存数据,则如下图设置:
点击“VB编辑器”,写入如下代码:
填上代码后,一定要选择如下图这一步:点击“工具”-“引用”,在下图界面中,勾上microsoft activex data objects 2.1 library,否则会报错。
确定后保存。
右键点击FIXTIME8这一条,选择“调度程序属性”,在如下画面中选择“后台运行”,点确定;
在后续弹出的窗口中都选择“是”,直至完成,fixtimer8激活,时间一到,程序就会自动添加记录。
2.2从数据库读数据
从数据库读数据一般采用按钮触发,可以在ifix里新建一个画面,添
加一个按钮,在按钮
的脚本里添加代码,最后记得引用microsoft activex data objects 2.1
library。代码基本和2.1相同,只是把相应的insert命令换成select语句。
二、 IFIX制作excel报表
1、在建好数据库和数据源(参照1.1-1.3)后,新建一个ifix画面,添加一个ole对
象,选择“Microsoft Web Browser”,用来显示报表;
2、新建一张excel报表模板,放到工程目录的APP文件夹下,如“人工数据日报表.xls”;
3、新建一个按钮,为其编写脚本,粘贴如下代码(覆盖新建画面原有的代码):
Option Explicit
Dim a As Single ‘定义中间变量,用来暂存从数据库中取出的数据 Dim b As Single
Dim rsADO As ADODB.Recordset ‘定义连接数据库的ADO变量
Dim conn As New ADODB.Connection
Public CmdTruck As New ADODB.Command
Public dbUpdata As New ADODB.Command
Public rstUpdata As New Recordset
Private Sub CommandButton3_Click() ‘点击按钮的响应函数
Call showbb ‘调用显示报
表的函数showbb
Call closeDB1 ‘调用关闭数
据库的函数closeDB1
End Sub
Private Sub showbb()
Dim Rs As New ADODB.Recordset '定义连接数据库的ADO变量
openDB1 ‘打开DB1数据库,该函数在后面有定义 CmdTruck.ActiveConnection
= conn
CmdTruck.CommandText = \"select max(COL1) as COL1,max(COL2) as COL2 from data\" ‘从data表读取COL1和COL2的最大值
Set Rs = CmdTruck.Execute ‘执行SQL语句
a = 0
b = 0
If Not (Rs.BOF Or Rs.EOF) Then ‘将读出来的数据传给中间变量a、b If (Rs!col1) Then
a = Rs!col1
b = Rs!col2
End If
End If
Dim xlApp As Object '定义报表对象
Dim xlBook As Object
Dim xlSheet As Object
On Error GoTo errorhandle
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Open(System.ProjectPath & \"\\app\\人
工数据日报表.xls\") ‘打开报表模板 Set xlSheet =
xlBook.Worksheets(1)
xlApp.DisplayAlerts = False '警告禁用
xlApp.Visible = False 'EXCEL隐藏
xlSheet.Cells(10, 4) = a & \"\" ‘将中间变量的值写到对应excel的单元格 xlSheet.Cells(11, 4) = b
& \"\"
xlSheet.SaveAs System.ProjectPath & \"\\app\\人工数据日报表.htm\
FileFormat:=xlHtml '工作表另存为
xlApp.DisplayAlerts = True '警告使能
xlApp.Quit
Me.WebBrowser1.Navigate System.ProjectPath & \"\\app\\人工数据
日报表.htm\" ‘在WebBrowser控件上显示报表 xlApp.Quit
Set xlSheet = Nothing
'释放内存
Set xlBook = Nothing
Set xlApp = Nothing
Set CmdTruck = Nothing
Set Rs = Nothing
Exit Sub
errorhandle:
MsgBox \"报表生成错误~\信息...\"
Set xlSheet = Nothing
'释放内存
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
Public Sub openDB1() '定义打开数据库的函数openDB1
If conn.State <> adStateOpen Then
With conn
.ConnectionString = \"Provider=SQLOLEDB;
server=2C68LK83W2F62AZ;database=db1; uid=operation; pwd=123456;\"
‘连接数据源的相关信息
.Mode = adModeReadWrite
.Open
End With
End If
End Sub
Public Sub closeDB1() '定义关闭数据库的函数closeDB1
If conn.State = adStateOpen Then
conn.Close
End If
End Sub
4、添加代码后点击“工具”-“引用”,在下图界面中,勾上microsoft
activex data objects
2.1 library和Microsoft excel 12.0 object library,否则会报错。
5、最后保存代码。
因篇幅问题不能全部显示,请点此查看更多更全内容