搬家第五天-95.Wincc V7.3 grid表格控件修改數值


前面的博客介紹了如何使用MSHFGrid和DataGrid把查詢到的數據顯示出來,有些情況下我們還需要對這些數據進行修改,並且把SQL Server相應記錄也進行修改。本文就記錄一下這兩種控件如何進行數據修改以及sql數據表更新。

     1. 我們還是以用戶歸檔那張表為例子。假設用戶歸檔名字為UA,已經有了一些基礎數據如圖:

2. 寫一個全局項目模塊vbs腳本,用於查詢數據:

Sub SearchTable(report,DBName,ssql)
Dim ors,ocom,scon,conn
Dim PCName
Set PCName=HMIRuntime.Tags("@LocalMachineName")
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog ='" _
     & DBName & "';Data Source = " & PCName.Read  & "\WINCC"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
Set report.datasource=ors
End Sub

   3. 新建一個管理員賬戶SysAdmin,修改數據必須是這個用戶才行。設置ctrl+L快捷鍵進行用戶登錄。

    4. Wincc新建畫面,放入MSHFGrid控件,名字修改為Report1,放置DataGrid控件,名字修改為Report2。本例簡單化不做條件查詢,控件里面顯示所有的結果。在畫面的打開事件中添加以下vbs腳本:

Sub OnOpen()
Dim DBName,ssql,scon,conn
Dim Report1,Report2
Set Report1=ScreenItems("Report1")
Set Report2=ScreenItems("Report2")
Set DBName=HMIRuntime.Tags("@DatasourceNameRT")
ssql="select Curdate as '日期',Curtime as '時間',FT101 as '流量1',FT102 as '流量2',FT103 as '流量3'," _
    & "PT101 as '壓力1',PT102 as '壓力2',PT103 as '壓力3',TT101 as '溫度1',TT102 as '溫度2',TT103 as '溫度3'," _
    & "LT101 as '液位1',LT102 as '液位2',LT103 as '液位3' from UA#UA"
SearchTable report1,DBName.Read ,ssql
SearchTable report2,DBName.Read ,ssql
End Sub

運行后,兩個空間會自動的顯示sql數據表的數據。

5. Report1控件的點擊事件中添加以下vbs腳本

Sub Click(ByVal Item)            
Dim username,DefaultValue,ModifyValue,CurRow,CurCol
Dim Report,DBName,ssql,FieldName,CurID
Set Report=ScreenItems("Report1")
Set username=HMIRuntime.Tags("@CurrentUserName")
Set DBName=HMIRuntime.Tags("@DatasourceNameRT")
If Ucase(username.Read) <> "SYSADMIN" Then '判斷是不是有修改權限
   Msgbox "權限不足,請先登錄"
Else
   CurRow=Report.Row
   CurCol=Report.Col
   DefaultValue=Report.TextMatrix(CurRow,CurCol)
   If CurCol=1 Or CurCol=2 Or CurCol=3 Then
    Msgbox "前三列不允許修改"
   Else
   ModifyValue=Inputbox("輸入想修改的數值","修改數值",DefaultValue,300,300)
    If (Not IsNumeric(ModifyValue)) Or (ModifyValue="") Then
      Msgbox "輸入的不是數字且不為空,請重新輸入"
    Else
      Report.TextMatrix(CurRow,CurCol)=ModifyValue
   '更新數據表相應數值
    Select Case CurCol
    Case 4
   FieldName="FT101"
    Case 5
   FieldName="FT102"
    Case 6
   FieldName="FT103"
    Case 7
   FieldName="PT101"
    Case 8
   FieldName="PT102"
    Case 9
   FieldName="PT103"
    Case 10
   FieldName="TT101"
    Case 11
   FieldName="TT102"
    Case 12
   FieldName="TT103"
    Case 13
   FieldName="LT101"
    Case 14
   FieldName="LT102"
    Case 15
   FieldName="LT103"
    End Select
     CurID=Report.TextMatrix(CurRow,1)
     ssql="update UA#UA set " & FieldName & "='" & CStr(Report.TextMatrix(CurRow,CurCol)) & "' where ID='" & CurID & "'"
     SearchTable report,DBName.Read ,ssql
    End If
    End If  
End If
End Sub

 

6. Report2控件的單擊事件添加以下vbs腳本

Sub Click(ByVal Item)                       
Dim username,DefaultValue,ModifyValue,CurRow,CurCol
Dim Report,DBName,ssql,FieldName,CurID
Set Report=ScreenItems("Report2")
Set username=HMIRuntime.Tags("@CurrentUserName")
Set DBName=HMIRuntime.Tags("@DatasourceNameRT")
If Ucase(username.Read) <> "SYSADMIN" Then '判斷是不是有修改權限
   Msgbox "權限不足,請先登錄"
Else
   CurRow=Report.Row '當前行號,從0開始的數值
   CurCol=Report.Col '當前列號,從0開始的數值
  DefaultValue=Report.Columns.Item(CurCol).Text
   'Msgbox DefaultValue
   If CurCol=0 Or CurCol=1 Or CurCol=2 Then
    Msgbox "前三列不允許修改"
   Else
   ModifyValue=Inputbox("輸入想修改的數值","修改數值",DefaultValue,300,300)
    If (Not IsNumeric(ModifyValue)) Or (ModifyValue="") Then
      Msgbox "輸入的不是數字且不為空,請重新輸入"
    Else
      Report.Row=CurRow
      Report.Text =CStr(ModifyValue)
     
   '更新數據表相應數值
    Select Case CurCol
    Case 3
   FieldName="FT101"
    Case 4
   FieldName="FT102"
    Case 5
   FieldName="FT103"
    Case 6
   FieldName="PT101"
    Case 7
   FieldName="PT102"
    Case 8
   FieldName="PT103"
    Case 9
   FieldName="TT101"
    Case 10
   FieldName="TT102"
    Case 11
   FieldName="TT103"
    Case 12
   FieldName="LT101"
    Case 13
   FieldName="LT102"
    Case 14
   FieldName="LT103"
    End Select
    ' 取得ID數值
     report.Row=CurRow
     report.Col=0
     CurID=Report.Text
     ssql="update UA#UA set " & FieldName & "='" & ModifyValue & "' where ID='" & CurID & "'"
     SearchTable report,DBName.Read ,ssql
     ssql="select ID,Curdate as '日期',Curtime as '時間',FT101 as '流量1',FT102 as '流量2',FT103 as '流量3'," _
    & "PT101 as '壓力1',PT102 as '壓力2',PT103 as '壓力3',TT101 as '溫度1',TT102 as '溫度2',TT103 as '溫度3'," _
    & "LT101 as '液位1',LT102 as '液位2',LT103 as '液位3' from UA#UA"
    SearchTable report,DBName.Read ,ssql
    End If
    End If  
End If

End Sub


免責聲明!

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



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