在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 0
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(0) = 620
MSFlexGrid1.ColWidth(1) = 1500
MsFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500
MSFlexGrid1.ColWidth(4) = 1500
MSFlexGrid1.ColWidth(5) = 1500
MsFlexGrid1.ColWidth(6) = 1500
MSFlexGrid1.ColWidth(7) = 1500
MSFlexGrid1.ColWidth(8) = 1600
MSFlexGrid1.ColWidth(9) = 2000
MsFlexGrid1.ColWidth(10) = 2000

MSFlexGrid1.TextMatrix(0,0) = "編號"
MSFlexGrid1.TextMatrix(0,1) = "流水號"
MSFlexGrid1.TextMatrix(0,2) = "樁號"
MSFlexGrid1.TextMatrix(0,3) = "卡號"
MSFlexGrid1.TextMatrix(0,4) = "操作員號"
MSFlexGrid1.TextMatrix(0,5) = "電量(度)"
MSFlexGrid1.TextMatrix(0,6) = "金額(元)"
MSFlexGrid1.TextMatrix(0,7) = "時長(分)"
MSFlexGrid1.TextMatrix(0,8) = "費率(元/度)"
MSFlexGrid1.TextMatrix(0,9) = "日期"
MSFlexGrid1.TextMatrix(0,10) = "時間"

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
MSFlexGrid1.ColAlignment(8) = 4
MSFlexGrid1.ColAlignment(9) = 4
MSFlexGrid1.ColAlignment(10) = 4

Dim i
For i= 1 To 39 Step 1
       MSFlexGrid1.TextMatrix(i,0) = i
Next

cb1.Text="*"
cb1.AddItem "*"
cb1.AddItem "1"
cb1.AddItem "2"
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 = 1 To 39 Step 1
For i2=1 To 10 Step 1
       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=0
cv2=0
cv3=0
If cb1.Text<>"*" Then
       cv1=4
End If

If tb1.Text<>"*" Then
       cv2=2
End if

If tb2.Text<>"*" Then
       cv3=1
End If
cv=cv1+cv2+cv3
Select Case cv
       Case 7
              strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And cardno like '"&tb1.Text&"'And operno like '"&tb2.Text&"'"
       Case 6
              strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And cardno like '"&tb1.Text&"'"
       Case 5
              strSQL = "select * from evcp where pileno like '"&cb1.Text&"'And operno like '"&tb2.Text&"'"
       Case 4
              strSQL = "select * from evcp where pileno like '"&cb1.Text&"'"
       Case 3
              strSQL = "select * from evcp where cardno like '"&tb1.Text&"'And operno like '"&tb2.Text&"'"
       Case 2
              strSQL = "select * from evcp where cardno like '"&tb1.Text&"'"
       Case 1
              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=0
If (objRecordset.Bof And objRecordset.Eof) Then
       MsgBox("沒有符合要求的記錄")
Else
While Not objRecordset.EOF
       i=i+1
       MSFlexGrid1.TextMatrix(i, 1) = CStr(objRecordset.Fields(0).Value)
       MSFlexGrid1.TextMatrix(i, 2) = CStr(objRecordset.Fields(1).Value)
       MSFlexGrid1.TextMatrix(i, 3) = CStr(objRecordset.Fields(2).Value)
       MSFlexGrid1.TextMatrix(i, 4) = CStr(objRecordset.Fields(3).Value)
       MSFlexGrid1.TextMatrix(i, 5) = CStr(objRecordset.Fields(4).Value)
       MSFlexGrid1.TextMatrix(i, 6) = CStr(objRecordset.Fields(5).Value)
       MSFlexGrid1.TextMatrix(i, 7) = CStr(objRecordset.Fields(6).Value)
       MSFlexGrid1.TextMatrix(i, 8) = CStr(objRecordset.Fields(7).Value)
       MSFlexGrid1.TextMatrix(i, 9) = CStr(objRecordset.Fields(8).Value)
       MSFlexGrid1.TextMatrix(i, 10) = CStr(objRecordset.Fields(9).Value)
       objRecordset.movenext
Wend
End If

Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
End Sub

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM