天天看点

WinCC 7.5 读取 SQL server2016 中的表格数据

环境

win10

SQL Server 2016

WinCC V7.5 SP2

功能

打开界面时,立即显示数据库中当天的数据

0 运行结果

WinCC 7.5 读取 SQL server2016 中的表格数据
WinCC 7.5 读取 SQL server2016 中的表格数据

1 安装SQL Server 2016

2 打开 SQL Server Management Studio 选择服务器名称 .\WINCC(没有的话,自己敲进去 )

3 建数据库、建表

三个重要数据:

WinCC 7.5 读取 SQL server2016 中的表格数据

4 WinCC设置

双击计算机,勾选全局脚本系统 + 图形运行系统

WinCC 7.5 读取 SQL server2016 中的表格数据

由于需要用到VB脚本,因此需要开启VBS调试

WinCC 7.5 读取 SQL server2016 中的表格数据

7 WinCC控件设置

找不到控件时,添加控件:

WinCC 7.5 读取 SQL server2016 中的表格数据

控件设置:

WinCC 7.5 读取 SQL server2016 中的表格数据

希望在打开画面的时候显示数据:【右击画面 > 属性>事件>其他>打开画面> 右击>VBS】

WinCC 7.5 读取 SQL server2016 中的表格数据

8 VB 脚本(不包括头尾模板)

'Dim 声明变量
Dim kj1,kj2,kj3,kj4,kj5,kj6,kj7,kj8
Dim QR
Dim MSFlexGrid1 '对应表格控件名
Dim LocalBeginTime,LocalEndTime,riqi
Dim oRs,oRs1,n,n1,i,z,s1,s11,oCom,oCom1,strcn,conn,pj
Dim zxy1

'查询当天全部数据,除了控件名称要注意修改外,以上其他为标准
Set MSFlexGrid1 = ScreenItems("MyTable")  'MyTable
'当前时间Now
riqi=Now
'设置开始时间和结束时间
LocalBeginTime = Year(riqi)&"-"&Month(riqi)&"-"&Day(riqi)&" "&"00:00:00"
LocalEndTime =  Year(riqi)&"-"&Month(riqi)&"-"&Day(riqi)&" "&"23:59:59"

s1="SELECT Date,Name,L1,L2,L3,L4,L5 FROM Table_1 WHERE Date BETWEEN'"&LocalBeginTime&"'and '"&LocalEndTime&"'ORDER BY Date"
's1后面的内容要对应数控中 列的内容,后面的Date和前面的Date要名称一直,Table_1要对应数据库列表名称dbo.后面的名称
strcn = "Provider=SQLOLEDB.1; Integrated Security=SSPI; Persist Security Info=False; Initial Catalog=GGHSDATABASE; Data Source=.\WINCC"

Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = strcn
conn.CursorLocation = 3
conn.Open

Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection=conn
oCom.CommandText = s1'执行检索功能
Set oRs = oCom.Execute'==========================================================
n=oRs.RecordCount '获得检索到的总数

'定义在线表格属性
MSFlexGrid1.Clear
'MSFlexGrid1.Rows = oRs.RecordCount + 2 '=======================这句话有问题
MSFlexGrid1.ColWidth(0)=700		'第一列宽度设置
MSFlexGrid1.ColWidth(1)=2500
MSFlexGrid1.ColWidth(2)=2500
MSFlexGrid1.ColWidth(3)=2500
MSFlexGrid1.ColWidth(4)=2500
MSFlexGrid1.ColWidth(5)=25
MSFlexGrid1.ColWidth(6)=2500
MSFlexGrid1.ColWidth(7)=2500

MSFlexGrid1.RowHeight(0) = 600 	'第一行高度设置
MSFlexGrid1.RowHeight(1) = 400

MSFlexGrid1.Row = 0
For z = 0 To 7	'根据上面的列数改变
	MSFlexGrid1.CellFontSize = 12 '字体大小
	MSFlexGrid1.Col = z
	MSFlexGrid1.Text = "读数据库测试表"
Next

MSFlexGrid1.MergeCells = 4 '相同内容单元格合并(标题Text合并掉)
MSFlexGrid1.MergeRow(0) = True '合并单元格
MSFlexGrid1.Row = 1

For z = 0 To 7 '根据上面的列数改变
	MSFlexGrid1.Col = z
	MSFlexGrid1.CellBackColor = vbCyan '定义第二行颜色
Next

MSFlexGrid1.TextMatrix(1,0) = "序号" 	'根据实际情况输入
MSFlexGrid1.TextMatrix(1,1) = "日期"
MSFlexGrid1.TextMatrix(1,2) = "名称"
MSFlexGrid1.TextMatrix(1,3) = "L1"
MSFlexGrid1.TextMatrix(1,4) = "L2"
MSFlexGrid1.TextMatrix(1,5) = "L3"
MSFlexGrid1.TextMatrix(1,6) = "L4"
MSFlexGrid1.TextMatrix(1,7) = "L5"

'对齐方式
MSFlexGrid1.ColAlignment(0) = 4
MSFlexGrid1.ColAlignment(1) = 4
MSFlexGrid1.ColAlignment(2) = 4
MSFlexGrid1.ColAlignment(3) = 4
MSFlexGrid1.ColAlignment(4) = 4
MSFlexGrid1.ColAlignment(5) = 4
MSFlexGrid1.ColAlignment(6) = 4
MSFlexGrid1.ColAlignment(7) = 4

'查询数据,插入在线表格对应位置
If(n>0)Then

		oRs.MoveFirst	'移动到数据库据检索结果的第一行
		i=0
		Do While Not oRs.EOF '是否到记录末尾,循环填写表格
		n=n+1
		MSFlexGrid1.TextMatrix(i+2,0) = i '序号
		MSFlexGrid1.TextMatrix(i+2,1) = oRs.Fields(0).Value
		MSFlexGrid1.TextMatrix(i+2,2) = oRs.Fields(1).Value
		MSFlexGrid1.TextMatrix(i+2,3) = oRs.Fields(2).Value
		MSFlexGrid1.TextMatrix(i+2,4) = oRs.Fields(3).Value
		MSFlexGrid1.TextMatrix(i+2,5) = oRs.Fields(4).Value
		MSFlexGrid1.TextMatrix(i+2,6) = oRs.Fields(5).Value
		MSFlexGrid1.TextMatrix(i+2,7) = oRs.Fields(6).Value
		
			i = i+1
			oRs.MoveNext
			Loop
		conn.Close
			MSFlexGrid1.TopRow = MSFlexGrid1.Row-1 '移动到最后一行
Else
	MsgBox "您所查询的时间段内没有数据"
	oRs.Requery
	conn.Close
End If

           

继续阅读