数据库查询

Sub OnClick(ByVal Item)
  Dim sPro, sDsn, sSer,sCon, sSql
  Dim sVid, sStart, sStop, sVal,lRet,dVal, dGT
  Dim conn, oRs, oCom, oList, oItem
  Dim m,n,s, DSNName
  Dim objIOMinuten, objIOWert
  Set DSNName = HMIRuntime.Tags("ProjectDSN")
  ' 0.0 Get parameters from picture
  DSNName.Read 
  HMIRuntime.Trace "Value DSNName: " & DSNName.Read & vbCrLf
  sDsn = DSNName.Value
  HMIRuntime.Trace "Value DSNName.Value: " & sDsn & vbCrLf
  'sVid = CStr(13)
  sVid = CStr(106)'104 = ID of Archive\Achive variable "T01" 
     Set objIOMinuten = ScreenItems("Minuten")
  sStart=objIOMinuten.OutputValue
  sStop = "0000-00-00 00:00:00.000"
  Set objIOWert = ScreenItems("Wert")
  sVal  = objIOWert.OutputValue
  '"Provider=WinCCOLEDBProvider.1;Catalog=CC_V6_Demo3_03_02_04_16_19_15R;Data Source=.\WinCC"
  sPro = "Provider=WinCCOLEDBProvider.1;"
  sDsn = "Catalog=" & sDsn & ";"
  sSer = "Data Source=.\WinCC"
  sCon = sPro & sDsn & sSer
  'Trace mit Ausgabe in GlobalSkriptDiagnose-Fenster
  HMIRuntime.Trace "sCon: " & sCon & vbCrLf
  sSql = "Tag:R," & sVid & ",'0000-00-00 00:" & sStart & ":00.000','" & sStop & "'"

     lRet = MsgBox("Opened with " & vbCr & sCon & vbCr & sSql & vbCr & sVal, vbOKCancel)
 '    If lRet <> 1 Then Exit Sub

     'Trace mit Ausgabe in GlobalSkriptDiagnose-Fenster
     HMIRuntime.Trace "sSql: " & sSql & vbCrLf
      ' 2.1 Make connection
     Set conn = CreateObject("ADODB.Connection")
     conn.ConnectionString = sCon
     
     'Trace mit Ausgabe in GlobalSkriptDiagnose-Fenster
     HMIRuntime.Trace "conn.ConnectionString: " & conn.ConnectionString & vbCrLf
     
     conn.CursorLocation = 3 'adUseClient original'
     conn.Open
     
  ' 2.2 Use command text for query
     Set oRs = CreateObject("ADODB.Recordset")
     Set oCom = CreateObject("ADODB.Command")
     
     ' adCmdText  = 1
     oCom.CommandType = 1 
     Set oCom.ActiveConnection = conn
     oCom.CommandText = sSql
     
  ' 2.3 Fill the recordset
     Set oRs = oCom.Execute
     m = oRs.Fields.Count
     
  ' 3.0 Fill standard listview object with recordset
     Set oList = ScreenItems("ListTable")
     oList.ListItems.Clear
     If(m>0) Then
      oRs.MoveFirst
      n = 0
      dGT = CDbl(sVal)
      Do While Not oRs.EOF
          n = n + 1
          dVal = oRs.Fields(2).Value
          If dVal > dGT  Then 
           s = Left(CStr(oRs.Fields(1).Value), 23)
           Set oItem = oList.ListItems.Add()
              oItem.Text = Left(CStr(oRs.Fields(1).Value), 23)
              oItem.SubItems(1) = FormatNumber(dVal, 4)
              oItem.SubItems(2) = Hex(oRs.Fields(4).Value)
             End If
             If (n > 100) Then Exit Do       
          oRs.MoveNext
      Loop
      oRs.Close
     Else
      
     End If
     Set oRs = Nothing
     Set conn = Nothing
  

 End Sub
 这是一段连接查询数据库到listview控件中的脚本,请问其中 Tags("ProjectDSN")是什么参数?要查询的变量不是T01吗?  另外想问下如何判断归档中的变量的ID号,例如:CStr(106)'104 = ID of Archive\Achive variable "T01"
 106从哪里读出的?
 希望高手帮帮忙

最佳答案

ProjectDSN应该是一个文本型的变量,保存的是本项目的运行数据库DSN名称,就是类似CC_V6_Demo3_03_02_04_16_19_15R的东西。

 归档变量的ID号需要通过SQL SERVER来获得。打开SQL Server Enterprise Manager,找到项目运行数据库(类似CC_V6_Demo3_03_02_04_16_19_15R),找到表格Archive,并通过Open Table->Return All Rows打开表格,找到对应的VALUE ID既是。

提问者对于答案的评价:
谢谢

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc276664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 下午12:35
下一篇 2019年6月11日 下午12:35

相关推荐

  • io域输出格式

    wincc的io域输出格式,例如999.9和999.99同样来表识一个浮点数,123.45,两种格式显示值有神么不同?前一个表示为:123.4;后一个表示为123.45;对吗?也即…

    SIMATIC WinCC 2017年6月18日
  • wincb7.5跳出窗口

    wincc7.5偶尔跳出如图窗口,是什么原因,怎样解决一下,还有打印窗口一直跳出无法关闭 图片说明:    最佳答案 缺少simatic net&nb…

    2020年11月1日
  • wincc购买正版问题

    各位学长,本人想购买wincc7.0SP3版正版授权,有几个问题不太清晰,麻烦指导下?1. wincc sp3支持XP3系统吗?2.购买RT运行版128k外部变…

    SIMATIC WinCC 2017年11月18日
  • 在线报导出到EXCEL时,如何改变报表的记录时间

    我在WINCC做一个在线报表,现需要整点记录,但是报表的记录时间不是整点,如何设定或修改? 最佳答案 WinCC V7.5 变量整点归档http://www.a…

    SIMATIC WinCC 2020年11月1日
  • WinCC现局域网相联

    现我有一工程,甲方要求我们的工控机与他们的局域相联,并能在相应电脑里观看工程设备运行状况。请问,最简单和最经济的方法分别是? 最佳答案 根据联网的目的,用途,数据量,接入的计算机数…

    SIMATIC WinCC 2019年6月11日
  • wincc flexible 项目在另一个版本里打不开

    wincc flexible 项目在另一个版本里打不开,报错:the project was created with&…

    SIMATIC WinCC 2017年6月6日
  • TP 700触摸屏历史数据存储

    在软件中设置历史数据存储为CSV格式,存在USB中,拷出数据后发现本来为实数的数据变成了整数,小数点后面的数没了。 问题补充:从TP 700  U盘中…

    2017年8月24日
  • WINCC7.3与315通讯问题

    WINCC与PLC315通讯时,开始正常,几个月后,偶尔出现WINCC界面不能起停设备,但可以正常给定模拟量。重启电脑后正常,这种现象出现的几率不固定,有时一周出现两次,有时一两个…

    SIMATIC WinCC 2020年11月1日
  • 两台WINCC互联

    现场项目为本机wincc连接s7-300单独进行调试,调试结束后,要通过另一台wincc控制本机的wincc进行操作,请问是否有可行的途径,如果有,能否概括的一下,应该如何配置组态…

    SIMATIC WinCC 2019年6月10日
  • 如何使用一个按钮依次开机多台电机?

    比如我有3个电机,A-B-C 这个是我的一个工况流程,当我按启动按钮C启动成功,B采集到C的启动信号然后启动,然后A采集到B的启动信号再启动,希望高手告诉我下如何实现!!…

    SIMATIC WinCC 2019年6月11日