Wincc v7.5报表教程

  • 目录
  • 一、概述
  • 1.1 前言
  • 1.2 主要功能
  • 1.3 使用的软件
  • 二、Wincc链接SQL Server数据库
  • 2.1 前言
  • 2.2 数据库说明
  • 2.2.1 数据库连接说明
  • 2.2.2 功能说明
  • 2.3 SQL server建库和建表
  • 2.4 建立wincc变量、画面
  • 2.4 1、新建项目:
  • 2.4.2、设备运行相关变量
  • 2.5 按钮脚本
  • 2.5.1随机数生成按钮
  • 2.5.2 保存按钮
  • 三、查询wincc保存的数据
  • 3.1、SQL Sever查询数据
  • 3.2“I/O查询” 按钮
  • 3.3 "MSHFlexGrid控件 查询"
  • 四、数据导出EXCEL并保存、查询
  • 4.1 数据导出到模板中
  • 4.2 以日期命名并指定文件夹保存
  • 4.3Excel在Web Browser控件中显示
  • 五、打印EXCEL
  • 5.1设置首选打印机
  • 5.2新建“打印报表的表格”
  • 5.3更新"生成报表"按钮
  • 六、结束语


目录

一、概述

1.1 前言

在工业生产中很多设备的数据是需要记录的,例如产能、所损耗的电能等都需要定时的记录,作为分析企业生产运营情况的依据。

本文以WinCC V7.5 SP1为例,介绍WinCC如何实现设备运行数据记录并通过报表的形式展现统计数据,如图1所示:

wincc的数据如何存储mysql wincc的数据库_数据

图一

1.2 主要功能

可以实现如下功能:
➢ 自动记录各设备的运行数据
➢ 自动统计各设备的运行时间
➢ 按设备、日期呈现报表
➢ 按日期和设备编号以EXCEL表格保存数据
➢ 可打印存有设备运行数据的表格

1.3 使用的软件

本文档所使用的各软件版本如下:
➢ 操作系统版本:Window10 专业版
➢ WinCC 版本: SIMATIC WinCC V7.5 SP1
➢ Office版本: Microsoft Office 2019

二、Wincc链接SQL Server数据库

2.1 前言

本章主要是介绍WINCC7.5 用VB来读写SQL server数据库,网上有不少这类例子,实现功能的方法也很多,但是在运行过程中,或多或少的发现有些关键点没有提及到。

2.2 数据库说明

2.2.1 数据库连接说明

名称

说明

备注

数据库名

Hong

表名

DataTableTest

用户名


密码


数据源

DESKTOP-VFDPROG

DESKTOP-VFDPROG:是我的计算机名,根据实际修改,也可以使用IP\WINCC

2.2.2 功能说明

代码

功能

说明

insert

增加

把数据写入到数据库(insert)

update

修改

修改T_ID显示的数据(update)

delete

删除

删除T_ID显示的数据(delete)

select

查询

查询T_ID_A的数据(select)

注:
insert、update、delete、select是PL/SQL对数据库操作的关键字,SQLServer、MySQL、Oracle等均支持。

更多语句功能详见网址:

链接: www.w3school.com.cn.

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_02

2.3 SQL server建库和建表

我用的是2019版本的,其他版本的相差无几

1、在开始—>所有程序,找到方框中箭头的那个单击,如下图所示:

wincc的数据如何存储mysql wincc的数据库_数据_03


倘若没有,请先安装SQL Server 20192、然后,弹出下面图片,记住这个服务器名称 后面的值,这个等会程序中会用到,

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_04


3、点击 链接,右键“数据库” 点击 “新建数据库” 这是建库

wincc的数据如何存储mysql wincc的数据库_sql_05


wincc的数据如何存储mysql wincc的数据库_sql_06


4、然后在“数据库名称(N)”中输入数据库名字,点“确定”。这个名字用英文,我测试,所有名字随便取得

wincc的数据如何存储mysql wincc的数据库_数据库_07


5、新建好了之后,点“数据库” ,就出现了下图信息

wincc的数据如何存储mysql wincc的数据库_数据库_08

6、然后在库“Hong”下面 的“表” 右键—>“新建”—>点击“表(T)”,就出现下图,这是建表,建表的意思就是建立一个小房间,这个房间专门用来存放某一个单独业务数据,比如专门存放某一个设备启停和产量等信息

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_09


7、进入下图,下面这个图是建字段,字段是用来存放设备中的属性,例如编号,时间、电能、停止电能和产量等等

wincc的数据如何存储mysql wincc的数据库_数据库_10


列名就是填写数据英文名称,

数据类型 是字符、数字、浮点要选的类型都不一样,这个数据类型也很重要,它涉及到保存数据的长度,如果选错了,保存数据就会有问题。

不同的数据库都会详细介绍各个类型的使用场景,数据库基础知识我就不介绍了,随便找一个对于数据库的教学视频或者书都会介绍。

允许Null值意思是是否允许这一个值为空。

就是说当保存一个设备编号为1,开始电能为114KW的数据时候,允许为空的情况下,保存数据的时候,如果SQL语句中对于dev_no的值没取到,或者丢失,则这条数据也会保存,那么最终保存到数据库的信息就是编号为空,年龄为开始电能为114KW8、

注:其中ID需要改成标识,标识增量为1,如下图所示:

wincc的数据如何存储mysql wincc的数据库_Power_11

9、填好信息后,保存,就会弹出下面图片,这个是填写表的名字,就是给这个小房间弄一个名字,例如DataTableTest

wincc的数据如何存储mysql wincc的数据库_数据_12


wincc的数据如何存储mysql wincc的数据库_数据库_13


到这里,数据库的建库建表就完成了,这个是鼠标操作,还可以用SQL语句来建表,或者直接拿别的地方导出的库文件直接导入到这个数据库,前提是同类型数据库。

2.4 建立wincc变量、画面

2.4 1、新建项目:

Wincc_report_H

wincc的数据如何存储mysql wincc的数据库_sql_14


wincc的数据如何存储mysql wincc的数据库_数据_15

2.4.2、设备运行相关变量

设备运行相关变量以结构变量形式创建。根据需要创建结构变量的元素,

本例中包括T_Datetime(时间)、T_ID(ID)、T_ID_A(查询ID)、T_Power(电能表数据)、T_Count (生产数量)三个元素,数据类型如图4所示。

wincc的数据如何存储mysql wincc的数据库_sql_16

3、新建画面

3.1新建画面

新建画面,然后就自动出现了下图的这个文件

wincc的数据如何存储mysql wincc的数据库_sql_17

这里可以修改画面名字

wincc的数据如何存储mysql wincc的数据库_sql_18

进入画面后,新建一个按钮、数字输入项、多行文本

wincc的数据如何存储mysql wincc的数据库_sql_19

2.5 按钮脚本

2.5.1随机数生成按钮

目的:
在wincc中,需要大量的数据来进行软件仿真,因此需要使用脚本实现产生随机数的功能。

脚本代码:
全局脚本:

Function MyRnd(min,max)
MyRnd=Rnd*(max-min+1)+min  '在(min,max)之间取随机数
End Function

按钮脚本

Sub OnClick(Byval Item)                        

'随机产生0-1000内的数据
HMIRuntime.Tags("T_Power").Write MyRnd(0,1000)
HMIRuntime.Tags("T_Count").Write MyRnd(0,1000)



End Sub

脚本图像:

wincc的数据如何存储mysql wincc的数据库_sql_20


wincc的数据如何存储mysql wincc的数据库_sql_21

运行结果:

wincc的数据如何存储mysql wincc的数据库_数据库_22

2.5.2 保存按钮

目的:

将数据保存到数据库的DataTableTest的表格中,保存也为增加命令
脚本代码:

打开VB窗口后,开始编码,下面编码中需要修改的地方就是
Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG
Hong:是库的名字
DESKTOP-VFDPROG就是在登陆数据库软件的地方,之前截图让记住的地方

Sub OnClick(Byval Item)                      
  
	Dim conn                     '定义类对象
	Dim SCon                     '定义数据库连接字符串
	Dim oRs1                       '定义获取到的数据集
	Dim oCom
	Dim strSQL1
	Dim Datetime,Count,Power

	 '---------打开数据库 -----------'
	  sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
		Set conn=CreateObject("ADODB.Connection")
		  conn.ConnectionString = sCon
		  conn.CursorLocation = 3  
		  conn.Open
		Set oRs1 = CreateObject("ADODB.Recordset")
		Set oCom = CreateObject("ADODB.Command")
		 oCom.CommandType = 1
	  
	  
	   '---------读取数据-----------'		
		Datetime = HMIRuntime.Tags("T_Datetime").Read
		Power = HMIRuntime.Tags("T_Power").Read
		Count = HMIRuntime.Tags("T_Count").Read
	   '---------测试是否能取到值-----------'
	    MsgBox("Power=" & Power)
	    
	    
	    
	   
	   '---------弹框显示测试数据是否正确-----------'	 
		Dim Msg, Style, Title, Help, Ctxt, Response, MyString
		    Msg = "Do you want to continue "  ' 定义信息。
		    Style = vbYesNo + vbQuestion + vbDefaultButton2   ' 定义按钮。
		    Title = "是否保存"   ' 定义标题。
		    Help = "DEMO.HLP"   ' 定义帮助文件。
		    Ctxt = 1000   ' 定义标题
		  ' 上下文。
		  
		  ' 显示信息。
		    Response = MsgBox(Msg, Style, Title, Help, Ctxt)
		    
		    If Response = vbYes Then   ' 用户按下“是”。
		        MyString = "Yes"   ' 完成某操作。
			 	 '---------弹框显示测试数据是否正确-----------'    
			 	 
			 	 
				 	strSQL1 = "INSERT INTO [Hong].[dbo].[DataTableTest] ([Datetime], [Power], [Count])"  
				'SQL数据库变量
				    strSQL1 = strSQL1 & " VALUES ('" & Datetime & "', '" & Power &"', '" & Count & "')"
			    '从wincc读取的临时变量	 						
					Set oCom.ActiveConnection = conn
					    oCom.CommandText = strSQL1           
				    Set oRs1 = oCom.Execute
			
				'---------关闭数据库-----------'    
					Set oRs1 = Nothing
					Set oCom = Nothing
					conn.Close
					Set conn = Nothing
				
			'---------弹框显示测试数据是否正确-----------'    
		    Else   ' 用户按下“否”。
		        MyString = "No"   ' 完成某操作。
		    End If
		'---------弹框显示测试数据是否正确-----------'    


End Sub

运行结果:
运行wincc后,首先点击随机生成数据,
然后点击保存,会有一个弹窗。

wincc的数据如何存储mysql wincc的数据库_数据_23


wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_24

重要说明:
这个里面最重要的并不是代码怎么写,而是下面这两行’测试是否能取到值
MsgBox(“Power=” & Power)
这个MsgBox是一个弹框的小玩意儿,他的作用就是弹窗显示你括号中的信息,这个东西为什么重要呢,因为他可以调试,当你没取到值或者出现什么错误,WINCC根本一点反应都没有,你就不知道到底执行到什么状态了,所以你可以把这个功能加到任何地方,来测试,就类似调试Html或者JS的时候,用alert来简单调试,在JAVA中用SystemO来打印调试,当然断点后Debug运行也可以。

三、查询wincc保存的数据

3.1、SQL Sever查询数据

1、打开DataTableTest数据库

wincc的数据如何存储mysql wincc的数据库_数据_25

2、然后弹出下框,直接点击“执行”,就出现了自己插入的数据

wincc的数据如何存储mysql wincc的数据库_Power_26

3.2“I/O查询” 按钮

查询插入数据,在IO输出域中显示

查询按钮

wincc的数据如何存储mysql wincc的数据库_数据_27

目的:
按照数据的ID号进行查询数据
脚本代码:

Sub OnClick(Byval Item)                             
 
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1                       '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim T_ID_A
 
T_ID_A = HMIRuntime.Tags("T_ID_A").read
 
'---------------------打开数据库 --------------------'
  sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
 
'---------------------查询数据库 --------------------'
strSQL1 ="SELECT [ID],[Datetime],[Power], [Count] FROM [Hong].[dbo].[DataTableTest]"
strSQL1 = strSQL1 & " WHERE ID = '" & T_ID_A & "'"
 
Set oCom.ActiveConnection = conn
oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute
 
 
'---------------------查询的数据传送给WinCC的内部变量 --------------------'
HMIRuntime.Tags("T_ID").write oRs1.fields("ID").value
HMIRuntime.Tags("T_Datetime").write oRs1.fields("Datetime").value
HMIRuntime.Tags("T_Power").write oRs1.fields("Power").value
HMIRuntime.Tags("T_Count").write oRs1.fields("Count").value
 
  MsgBox("查询结束" )
'----------------关闭数据库-----------'    
Set oRs1 = Nothing
Set oCom = Nothing
    conn.Close
Set conn = Nothing                        
 
 
End Sub

脚本图像:

wincc的数据如何存储mysql wincc的数据库_Power_28

运行结果:

wincc的数据如何存储mysql wincc的数据库_数据库_29

3.3 “MSHFlexGrid控件 查询”

使用MSHFlexGrid 控件来查询数据

1、查询的显示是用WINCC的MSHFlexGrid控件,这个控件默认没加载,所以要添加进来,如下图

wincc的数据如何存储mysql wincc的数据库_数据_30

2、添加进来后,就是下图这个东东

wincc的数据如何存储mysql wincc的数据库_Power_31

3、把控件添加到页面中,给控件命名,如下图,其他都在VB中处理,程序可以对表格行数列数等等做操作

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_32


4、给查询按钮添加VB事件,如下图

wincc的数据如何存储mysql wincc的数据库_数据_33


5、脚本代码:

Sub OnClick(Byval Item)                                  
 
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1                       '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m,i,j,k
 
'---------------------打开数据库 --------------------'
  sCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
 
'---------------------查询数据库 --------------------'
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
 
Set oCom.ActiveConnection = conn
oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute
 
 m = oRs1.RecordCount    
              MsgBox("查询到表格共有" & m &"行数据")
 
'---------------------设置MSHFlexGrid控件显示--------------------'
Dim olist
Set olist = ScreenItems("报表")
    olist.clear
    olist.Cols=5    '列数        
    olist.Rows = m+1 '行数量
 
For i = 0 To 2
    olist.ColAlignment(i)=3'列内容居中显示
Next
 
    '设置列宽    
    olist.ColWidth(0) = 800                 
    olist.ColWidth(1) = 1200
    olist.ColWidth(2) = 1200
    olist.ColWidth(3) = 1200
    olist.ColWidth(4) = 1200
 
    '设置表头
    oList.TextMatrix(0, 0)="序号"   
oList.TextMatrix(0, 1)="ID"                      
    oList.TextMatrix(0, 2) = "时间"   
    oList.TextMatrix(0, 3) = "电能"
    oList.TextMatrix(0, 4) = "生产数量"
    
'---------------------将数据写入表格--------------------'        
oRs1.movefirst
    For i = 1 To m  
    oList.TextMatrix(i ,0) = i     
        oList.TextMatrix(i ,1) = oRs1.Fields(0).Value
        oList.TextMatrix(i ,2) = oRs1.Fields(1).Value
        oList.TextMatrix(i ,3) = oRs1.Fields(2).Value
        oList.TextMatrix(i ,4) = oRs1.Fields(3).Value       
        oRs1.movenext
    Next
  MsgBox("查询结束" )
'----------------关闭数据库-----------'    
Set oRs1 = Nothing
Set oCom = Nothing
    conn.Close
Set conn = Nothing                        
 
End Sub

6、运行结果

wincc的数据如何存储mysql wincc的数据库_Power_34

wincc的数据如何存储mysql wincc的数据库_数据库_35

wincc的数据如何存储mysql wincc的数据库_Power_36

四、数据导出EXCEL并保存、查询

4.1 数据导出到模板中

1、在D盘中新建表格

wincc的数据如何存储mysql wincc的数据库_sql_37

2、编辑DataTableTest表格

wincc的数据如何存储mysql wincc的数据库_数据_38


3、添加导出EXCEL按钮

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_39


4、按钮脚本

Sub OnClick(Byval Item)              
                     
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect
 
'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
    oCom.CommandType = 1
Set oCom.ActiveConnection = conn
    oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute              
    m = oRs1.RecordCount    
MsgBox("查询到表格共有" & m &"行数据")
 
'---------------------打开Excel模板 --------------------'        
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")
    objExcelApp.Visible=True
Set a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx")  
Set b =a.Worksheets("Sheet1")
    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         
    objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'        
If (oRs1.EOF) Then
    MsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                
        For i = 4 To m+3
        
            With objExcelApp.Worksheets("Sheet1")
            .cells(i,1).value=CStr(oRs1.Fields(0).Value)
            .cells(i,2).value=CStr(oRs1.Fields(1).Value)
            .cells(i,3).value=CStr(oRs1.Fields(2).Value)
            .cells(i,4).value=CStr(oRs1.Fields(3).Value)
            End With
            oRs1.MoveNext
        Next
End If
 
'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = Nothing
 
End Sub

5、运行结果

wincc的数据如何存储mysql wincc的数据库_sql_40

wincc的数据如何存储mysql wincc的数据库_数据_41

wincc的数据如何存储mysql wincc的数据库_数据_42

wincc的数据如何存储mysql wincc的数据库_数据库_43

4.2 以日期命名并指定文件夹保存

1、D盘新建日报表文件夹

后面的的表格都保存到这个文件夹中

wincc的数据如何存储mysql wincc的数据库_数据_44


2、改进导出EXCEL按钮

wincc的数据如何存储mysql wincc的数据库_wincc的数据如何存储mysql_45


3、按钮新脚本

Sub OnClick(Byval Item)                 
                     
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect
 
'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
    oCom.CommandType = 1
Set oCom.ActiveConnection = conn
    oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute              
    m = oRs1.RecordCount    
MsgBox("查询到表格共有" & m &"行数据")
 
'---------------------打开Excel模板 --------------------'        
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")
    objExcelApp.Visible=True
Set a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx")  
Set b =a.Worksheets("Sheet1")
    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         
    objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'        
If (oRs1.EOF) Then
    MsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                
        For i = 4 To m+3
        
            With objExcelApp.Worksheets("Sheet1")
            .cells(i,1).value=CStr(oRs1.Fields(0).Value)
            .cells(i,2).value=CStr(oRs1.Fields(1).Value)
            .cells(i,3).value=CStr(oRs1.Fields(2).Value)
            .cells(i,4).value=CStr(oRs1.Fields(3).Value)
            End With
            oRs1.MoveNext
        Next
End If
 
'---------------------以日期命名,并保存到指定文件夹 --------------------'        
Dim patch,filename
 filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))
 patch= "D:\日报表\"&filename&".xlsx" 
 objExcelApp.ActiveWorkbook.SaveAs patch
 objExcelApp.Workbooks.Close
 objExcelApp.Quit
 
         MsgBox "成功生成数据文件!"
 
 
'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = Nothing
 
End Sub

4、运行结果

wincc的数据如何存储mysql wincc的数据库_数据_46

wincc的数据如何存储mysql wincc的数据库_sql_47

wincc的数据如何存储mysql wincc的数据库_数据库_48


wincc的数据如何存储mysql wincc的数据库_数据库_49

wincc的数据如何存储mysql wincc的数据库_数据库_50

4.3Excel在Web Browser控件中显示

1、D盘日报表文件夹内新建web文件夹

后面的的表格都保存到这个文件夹中

wincc的数据如何存储mysql wincc的数据库_sql_51

2、添加Web Browser 控件

这个控件默认没加载,所以也要添加进来

wincc的数据如何存储mysql wincc的数据库_Power_52

wincc的数据如何存储mysql wincc的数据库_sql_53


3、把控件添加到页面中,给控件命名Web

4、

新建生成报表按钮

并添加VB事件,如图

wincc的数据如何存储mysql wincc的数据库_Power_54

wincc的数据如何存储mysql wincc的数据库_Power_55

5、按钮脚本

Sub OnClick(Byval Item)                               
On Error Resume Next
item.Enabled = False
                     
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect
 
'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
    oCom.CommandType = 1
Set oCom.ActiveConnection = conn
    oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute              
    m = oRs1.RecordCount    
MsgBox("查询到表格共有" & m &"行数据")
 
'---------------------打开Excel模板 --------------------'        
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")
    objExcelApp.Visible=False
     objExcelApp.DisplayAlerts=False
Set a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx") 
Set b =a.Worksheets("Sheet1")
    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         
    objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'        
If (oRs1.EOF) Then
    MsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                
        For i = 4 To m+3
        
            With objExcelApp.Worksheets("Sheet1")
            .cells(i,1).value=CStr(oRs1.Fields(0).Value)
            .cells(i,2).value=CStr(oRs1.Fields(1).Value)
            .cells(i,3).value=CStr(oRs1.Fields(2).Value)
            .cells(i,4).value=CStr(oRs1.Fields(3).Value)
            End With
            oRs1.MoveNext
        Next
        '---------------------文件同时保存到D:\日报表\web文件夹中--------------------'        
 a.SaveAs "D:\日报表\web\日报表.htm",44
 
'---------------------以日期命名,并保存到指定文件夹 --------------------'        
Dim patch,filename
 filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))
 patch= "D:\日报表\"&filename&".xlsx"                  
 objExcelApp.ActiveWorkbook.SaveAs patch
 objExcelApp.Workbooks.Close
 objExcelApp.Quit
 
         MsgBox "成功生成数据文件!"         
 
'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set objExcelBook= Nothing
Set objExcelSheet= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = Nothing
 
End If
 
 
 
 
'---------------------报表显示 --------------------'        
Dim wbCtrl
Set wbCtrl = ScreenItems("Web") '"Web"为Web控件名称
wbCtrl.Navigate  "D:\日报表\web\日报表.htm"
 
item.Enabled=True
End Sub

6、运行结果

wincc的数据如何存储mysql wincc的数据库_数据库_56


wincc的数据如何存储mysql wincc的数据库_Power_57

wincc的数据如何存储mysql wincc的数据库_Power_58

wincc的数据如何存储mysql wincc的数据库_Power_59

五、打印EXCEL

5.1设置首选打印机

这边我暂时没有链接实物打印机

所以先使用打印成PDF

wincc的数据如何存储mysql wincc的数据库_数据库_60

5.2新建“打印报表的表格”

因为每次生成的报表都有不同的名称,

首先在生成报表的按钮中要把数据同时保存在“打印报表.xlsx”中

同样在D盘日报表的文件夹里新建一个”打印报表“excel

wincc的数据如何存储mysql wincc的数据库_数据_61

5.3更新"生成报表"按钮

1、按钮脚本

Sub OnClick(Byval Item)                                        
On Error Resume Next
item.Enabled = False
                     
Dim conn                     '定义类对象
Dim SCon                     '定义数据库连接字符串
Dim oRs1           '定义获取到的数据集
Dim oCom
Dim strSQL1
Dim m
Dim ReportSelect
 
'---------------------打开并查询数据库 --------------------'
sCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"
strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"
Set conn=CreateObject("ADODB.Connection")
    conn.ConnectionString = sCon
    conn.CursorLocation = 3  
    conn.Open
Set oRs1 = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
    oCom.CommandType = 1
Set oCom.ActiveConnection = conn
    oCom.CommandText = strSQL1           
Set oRs1 = oCom.Execute              
    m = oRs1.RecordCount    
MsgBox("查询到表格共有" & m &"行数据")
 
'---------------------打开Excel模板 --------------------'        
Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,i
Set objExcelApp =CreateObject("Excel.Application")
    objExcelApp.Visible=False
     objExcelApp.DisplayAlerts=False
Set a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx") 
Set b =a.Worksheets("Sheet1")
    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         
    objExcelApp.Worksheets("Sheet1").Activate
'---------------------判断有无符合要求的数据 --------------------'        
If (oRs1.EOF) Then
    MsgBox("没有符合要求的记录")
Else
MsgBox("符合要求的记录")
oRs1.movefirst                
        For i = 4 To m+3
        
            With objExcelApp.Worksheets("Sheet1")
            .cells(i,1).value=CStr(oRs1.Fields(0).Value)
            .cells(i,2).value=CStr(oRs1.Fields(1).Value)
            .cells(i,3).value=CStr(oRs1.Fields(2).Value)
            .cells(i,4).value=CStr(oRs1.Fields(3).Value)
            End With
            oRs1.MoveNext
        Next
        
 
'------------------以日期命名,并保存到指定文件夹,同时数据保存到打印报表.xlsx中 --------------------'        
Dim patch,filename
 filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))
 patch= "D:\日报表\"&filename&".xlsx"                          
 objExcelApp.ActiveWorkbook.SaveAs patch
 a.SaveAs "D:\日报表\打印报表.xlsx"          '文件同时保存到D:\日报表\打印报表.xlsx
 objExcelApp.Workbooks.Close
 objExcelApp.Quit
 
'---------------------文件同时保存到D:\日报表\web文件夹中--------------------'        
 a.SaveAs "D:\日报表\web\日报表.htm",44
         MsgBox "成功生成数据文件!"         
 
'---------------------关闭数据库 --------------------'
Set objExcelApp= Nothing
Set objExcelBook= Nothing
Set objExcelSheet= Nothing
Set oRs1 = Nothing
Set oCom = Nothing
conn.Close
Set conn = Nothing
 
End If

 
 
 
 
'---------------------报表显示 --------------------'        
Dim wbCtrl
Set wbCtrl = ScreenItems("Web") '"Web"为Web控件名称
wbCtrl.Navigate  "D:\日报表\web\日报表.htm"
 
item.Enabled=True
End Sub

2、运行结果

wincc的数据如何存储mysql wincc的数据库_Power_62

wincc的数据如何存储mysql wincc的数据库_数据库_63

5.4打印按钮

1、新建按钮

wincc的数据如何存储mysql wincc的数据库_sql_64


2、脚本代码

Sub OnClick(Byval Item)                                                                                                
 
Dim objExcelApp 
Dim FileName 
FileName=  "D:\日报表\打印报表.xlsx"        '报表路径
Set objExcelApp=CreateObject("Excel.Application") 
objExcelApp.Visible=False 
objExcelApp.Workbooks.Open FileName 
objExcelApp.ActiveWorkbook.PrintOut() 
objExcelApp.Workbooks.Close() 
objExcelApp.Quit() 
 
 
End Sub

3、运行结果

wincc的数据如何存储mysql wincc的数据库_数据库_65

wincc的数据如何存储mysql wincc的数据库_sql_66

六、结束语

至此,已经详细介绍了SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置。