在WinCC中通过VBS操作SQL Server2005
在项目中需要在一定条件满足时,保存一些数据到数据库中,并可根据条件查询。考虑到WinCC6.2以后采用的就是SQL Server2005数据库,所以直接利用该数据库即可,通过SQL Server Management Studio(SSMS)可以创建自己的数据库,并安要求创建好表。
一、数据库连接
在SQL Server Management Studio(SSMS)中创建名为evcp的数据库,再创建名为evcp的表,然后根据需要创建Columns,在本项目中创建了norder(流水号)、pileno(桩号)、cardno(卡号)、operno(员工号)、energy(电量)、cost(金额)、period(时长)、rate(费率)、pdate(日期)和ptime(时间)。
在本项目中采用ODBC的方式连接数据库,首先在控制面板中创建好数据源,配置好SQL Server驱动数据源,命名为evcs。
二、数据写入
要求在一个状态量值为1的时候完成数据库的保存,等数据保存完后将状态量清0。
1、先在全局脚本VBS项目模块中创建函数savedata,代码如下:
Sub savedata
Dim objConnection
Dim objCommand
Dim objRecordset
Dim strConnectionString
Dim strSQL
Dim norder,pileno,cardno,operno,energy,cost,period,rate,pdate,ptime norder=HMIRuntime.Tags("norder").Read
pileno= HMIRuntime.Tags("pileno").Read
cardno=HMIRuntime.Tags("cardno").Read
operno= HMIRuntime.Tags("operno").Read
energy= HMIRuntime.Tags("energy").Read
cost= HMIRuntime.Tags("cost").Read
period= HMIRuntime.Tags("period").Read
rate= HMIRuntime.Tags("rate").Read
pdate= HMIRuntime.Tags("pdate").Read
ptime= HMIRuntime.Tags("ptime").Read strConnectionString = "Provider=MSDASQL;DSN=evcs;UID=;PWD=;"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objConnection.Open Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection strSQL = "insert into evcp (norder,pileno,cardno,operno,energy,cost,period,rate,pdate,ptime) values ("&_
"'"&norder&"',"&_
"'"&pileno&"',"&_
"'"&cardno&"',"&_
"'"&operno&"',"&_
"'"&energy&"',"&_
"'"&cost&"',"&_
"'"&period&"',"&_
"'"&rate&"',"&_
"'"&pdate&"',"&_
"'"&ptime&"')"
'MsgBox (strSQL)
objCommand.CommandText = strSQL
objCommand.Execute Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
End Sub
2、在全局脚本VBS动作中创建1秒周期的周期性出发动作,并添加如下代码:
Option Explicit
Function action
Dim v1
v1=HMIRuntime.Tags("satuse").Read If v1 Then
Call savedata
HMIRuntime.Tags("satuse").Write
End if
End Function
这样当satuse值为1时系统自动保存数据
三、数据查询
数据的查询要复杂一些,需要用到MSFlexGrid控件、MS Form2 ComboBox控件和MS Form2 TextBox,这几个控件可以单独注册也可以安装VB6后自动添加。
在查询页面上添加打开页面执行脚本如下:
Sub OnOpen()
Dim MSFlexGrid1,cb1,tb1,tb2
Set MSFlexGrid1 = ScreenItems("控件1")
Set cb1 = ScreenItems("cb1")
Set tb1 = ScreenItems("tb1")
Set tb2 = ScreenItems("tb2")
MSFlexGrid1.Clear MSFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MsFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MsFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MSFlexGrid1.ColWidth() =
MsFlexGrid1.ColWidth() = MSFlexGrid1.TextMatrix(,) = "编号"
MSFlexGrid1.TextMatrix(,) = "流水号"
MSFlexGrid1.TextMatrix(,) = "桩号"
MSFlexGrid1.TextMatrix(,) = "卡号"
MSFlexGrid1.TextMatrix(,) = "操作员号"
MSFlexGrid1.TextMatrix(,) = "电量(度)"
MSFlexGrid1.TextMatrix(,) = "金额(元)"
MSFlexGrid1.TextMatrix(,) = "时长(分)"
MSFlexGrid1.TextMatrix(,) = "费率(元/度)"
MSFlexGrid1.TextMatrix(,) = "日期"
MSFlexGrid1.TextMatrix(,) = "时间" MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() =
MSFlexGrid1.ColAlignment() = Dim i
For i= To Step
MSFlexGrid1.TextMatrix(i,) = i
Next cb1.Text="*"
cb1.AddItem "*"
cb1.AddItem ""
cb1.AddItem ""
tb1.Text="*"
tb2.Text="*" End Sub
这段代码主要是用来初始化控件的显示。
在查询按钮加入相应的代码实现三个键值(桩号、卡号、操作员号)条件组合的查询,代码如下:
Sub Click(Byval Item)
Dim objConnection
Dim objCommand
Dim objRecordset
Dim strConnectionString
Dim strSQL
Dim MSFlexGrid1,cb1,tb1,tb2
Dim i1,i2,cv1,cv2,cv3,cv
Set MSFlexGrid1 = ScreenItems("控件1")
Set cb1 = ScreenItems("cb1")
Set tb1 = ScreenItems("tb1")
Set tb2 = ScreenItems("tb2") '清除原有记录
For i1 = To Step
For i2= To Step
MSFlexGrid1.TextMatrix(i1, i2) =""
Next
Next
strConnectionString = "Provider=MSDASQL;DSN=evcs;UID=;PWD=;"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objConnection.Open
Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection cv1=
cv2=
cv3=
If cb1.Text<>"*" Then
cv1=
End If If tb1.Text<>"*" Then
cv2=
End if If tb2.Text<>"*" Then
cv3=
End If
cv=cv1+cv2+cv3
Select Case cv
Case
strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And cardno like '"&tb1.Text&"'And operno like '"&tb2.Text&"'"
Case
strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And cardno like '"&tb1.Text&"'"
Case
strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And operno like '"&tb2.Text&"'"
Case
strSQL = "select * from evcp where pileno like '"&cb1.Text&"'"
Case
strSQL = "select * from evcp where cardno like '"&tb1.Text&"'And operno like '"&tb2.Text&"'"
Case
strSQL = "select * from evcp where cardno like '"&tb1.Text&"'"
Case
strSQL = "select * from evcp where operno like '"&tb2.Text&"'"
Case Else
strSQL = "select * from evcp"
End Select objCommand.CommandText = strSQL
Set objRecordset = objCommand.Execute Dim i
i=
If (objRecordset.Bof And objRecordset.Eof) Then
MsgBox("没有符合要求的记录")
Else
While Not objRecordset.EOF
i=i+
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
MSFlexGrid1.TextMatrix(i, ) = CStr(objRecordset.Fields().Value)
objRecordset.movenext
Wend
End If Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
End Sub
在WinCC中通过VBS操作SQL Server2005的更多相关文章
- delphi向SQL Server2005中存取图片
SQL Server2005中,我用image类型来存取图片,首先把数据库表设置好 例如我的pic表有如下两列:时间,图片. delphi中,我用ADOQuery来连接数据库,但是数据库中有好几张表, ...
- 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作
http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...
- PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决
环境 Oracle 11.2.0 + SQL Plus 问题 根据以下要求编写函数:将scott.emp表中工资低于平均工资的职工工资加上200,并返回修改了工资的总人数.PL/SQL中有更新的操作, ...
- LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新
原文:LINQ To SQL在N层应用程序中的CUD操作.批量删除.批量更新 0. 说明 Linq to Sql,以下简称L2S. 以下文中所指的两层和三层结构,分别如下图所示: 准确的说,这里 ...
- SQL点滴33—SQL中的字符串操作
原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...
- SQL点滴18—SqlServer中的merge操作,相当地风骚
原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...
- SQL点滴2—重温sql语句中的join操作
原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,R ...
随机推荐
- [速记]关于指针,引用和递归和解递归——C++
在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...
- eclipse运行没问题,tomcat以脚本启动后插入数据库的中文会乱码
记一次部署工程的时候遇到的问题 部署war包到win7的时候发现,布上去后插入数据库的中文会乱码,然后发现用eclipse运行源码没问题,一开始以为是war打出来的时候编码错误,然后将eclipse的 ...
- 通过WebStorm上传代码至github
首先需要注册github帐号,具体方法自行百度/谷歌. 打开WebStorm,我用的是2016.2.4版本(如果你有edu邮箱的话,可以免费使用一年,不只是Webstorm,JetBrains全家桶都 ...
- HTML5学习总结-番外03 Angular Ionic
一 Angular Angular使用了MVVC设计模式,MVVC在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把mode ...
- SQL语句/函数汇总
1.CHARINDEX(短字符A,长字符B) 说明:返回A在B的位置,从1开始,若B中不存在A,则为0 例如: SELECT CHARINDEX('aaaa','abaaaacded') ----- ...
- 【JavaScript】ArtTemplate个人的使用体验。
据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...
- css悬浮
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title&g ...
- Linux虚拟机中配置JDK环境变量
前提准备: 1,安装好Linux系统 2,下载好可以将文件传输到Linux系统工具例如:WinSCP 3,在windows中下载Linux版JDK: http://download.oracle.co ...
- redis技巧--IP地址查询对应城市
场景: 根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了. 我们有城市和IP地址段的对应关系,如: 上海: 202.127.0.0 ~ 202.127 ...
- javascript 日期操作
1.获取指定年月有多少周 /** * 获得一个月的周数 * @param {} y {xxxx}4位数 * @param {} m {0-11} * @return {} */ function ge ...