数据库查询

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日
下一篇 2019年6月11日

相关推荐

  • wincc通过KEPserver软件通讯PLC数据,KEPserver开关量却不更新

    我有一旧电脑是WINCC通过KEPserver软件来与PLC通讯的,现在电脑换了,把原KEPserver  .OPF文件复制过来运行,模拟量更新没问题,但开关量…

    2021年7月5日
  • 如何在在线趋势图中获取实时统计数据?

    通过ruler control获取平均值、最大值时要暂停在线趋势图,如何不用暂停,如统计最新的10个数据的平均值、最大值? 最佳答案 参考:SIMATIC Wi…

    SIMATIC WinCC 2018年3月6日
  • wincc6.2中结构变量属性

    我建立了一个结构,里面有含有位变量,字节变量等。然后我建立了一个为该结构的结构变量,并给它一个地址,但是该结构内变量的地址并不是根据变量类型来增加的,比如我的首地址是30,结构内前…

    SIMATIC WinCC 2019年6月11日
  • 200PLC int数据类型 WINCC

    200PLC 已定整形数据如VW100=1008,但实代表物理数据是10.08如果在西门子触摸屏上显示可以定义int–移动数据2位,则能显示10.08;但是在WINCC…

    SIMATIC WinCC 2017年12月10日
  • RGV小车定位问题

    我想在WINCC画面上实时显示出RGV在车间里轨道运行的当前位置。轨道长500米左右。精度要求误差1米以下。有做过得嘛?GPS我看了误差好像100米,太大了肯定不行。。 …

    SIMATIC WinCC 2021年7月5日
  • 安装问题

    安装wiccfiexible2007时为什么提示缺少ssf文件,无法安装。 最佳答案 安装路径有中文字符,修改下路径就可以了 西门子软件的安装要求路径不能有中文,在不在根…

    SIMATIC WinCC 2019年6月11日
  • wincc 如何读取txt文件中的字符

    菜鸟一枚,网上看了别人写的代码复制过来后发现能写入,但读取不了,求告知哪里出现了问题 最佳答案 到网上查找  VB的文件操作。先定义一个文件对象,文件对象关联上…

    SIMATIC WinCC 2021年7月5日
  • 无法删除wincc文件夹

    我有一个5.2的文件,以前好用,能打开,能运行,不过后来我改过计算机名之后,他就不好用了,现在我想把这个文件夹删掉,再重新解压以前的压缩文件,不过现在发现怎么着也删除不了这个文件夹…

    SIMATIC WinCC 2019年6月11日
  • 2台电脑用CP5611通过profibus与315-2DP PLC通讯

    请问:两台电脑中的CP5611卡的地址怎么设置才不会重复呢? 最佳答案 2台电脑的CP5611和315-2DP PLC这三个profibus地址设置的不一样就可以。CP5…

    SIMATIC WinCC 2019年6月11日
  • wincc 长时间不操作 鼠标迟钝

    有两个工程项目,都是运行一年多了,wincc6.0版本。现在问题是操作员长时间不操作的话,再操作画面,鼠标迟钝十几米秒,但是操作起来后就没问题了。项目重新备份了一下,还是老问题。 …

    SIMATIC WinCC 2017年11月25日