加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

95.Wincc V7.3 grid表格控件修改数值

(2016-06-06 10:35:09)
标签:

wincc

mshfgrid

datagrid

vbs

修改数据更新数据表

分类: 西门子软硬件

       前面的博客介绍了如何使用MSHFGrid和DataGrid把查询到的数据显示出来,有些情况下我们还需要对这些数据进行修改,并且把SQL Server相应记录也进行修改。本文就记录一下这两种控件如何进行数据修改以及sql数据表更新。

      1. 我们还是以用户归档那张表为例子。假设用户归档名字为UA,已经有了一些基础数据如图:

95.Wincc <wbr>V7.3 <wbr>grid表格控件修改数值
   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数据表的数据。

95.Wincc <wbr>V7.3 <wbr>grid表格控件修改数值

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有