通过ConnectivityPack读取过程值归档

我在WinCC中写了段程序,代码如下:
 Sub OnClick(Byval Item)                                                                                                                                          

 Dim strcn
 Dim cn
 Dim is_SQL
 Dim com
 Dim com_SQL
 Dim rds

 Set cn = CreateObject ("ADODB.Connection")
 strcn = "Provider = WINCCOLEDBProvider.1; Catalog = CC_TEST_08_05_21_15_03_52R; Data Source = .\WINCC"
 cn.ConnectionString = strcn

 cn.open

 'com_SQL = "TAG:R,'ProcessValueArchive\AnalogTag','2008-07-08 01:00:00.000','0000-00-00 00:00:00.000'"
 com_SQL = "TAG:R,1,'0000-00-00 01:00:00.000','0000-00-00 00:00:00.000'"
 Set rds = CreateObject ("ADODB.Recordset") Set com = CreateObject ("ADODB.Command")
 com.ActiveConnection = strcn
 com.CommandText = com_SQL

 Set rds = com.Execute 

 Dim ListView1
 Dim Litem

 Set ListView1 = ScreenItems ("ListView1") 
 ListView1.ListItems.Clear ()
 ListView1.ColumnHeaders.Clear ()
 ListView1.GridLines = True
 ListView1.ColumnHeaders.Add , , CStr(rds.Fields(0).Name), 50 ListView1.ColumnHeaders.Add , , CStr(rds.Fields(1).Name), 50
 ListView1.ColumnHeaders.Add , , CStr(rds.Fields(2).Name), 50
 ListView1.ColumnHeaders.Add , , CStr(rds.Fields(3).Name), 50
 ListView1.ColumnHeaders.Add , , CStr(rds.Fields(4).Name), 50

 Set Litem = ListView1.ListItems.Add () 'object.Add(index, key, text, icon, smallIcon) 
 Litem.Text = CStr(rds.EOF)
 Litem.SubItems (1) = CStr(rds.Fields(1).Value)
 End Sub

 运行后.EOF显示True,死活就是读不出那个过程值来,各位看看问题出在哪里?我一直没有找到问题。谢谢了!!

问题补充:
我能返回Name,但是返回不了Value。问题是,如果这个表存在,但是里面没有值的话,也是可以返回Name的。但是我又看不到那个表里面的实际内容,所以只能通过EOF来判断到底有没有数据被读上来。

最佳答案

你是不是没有设置数据库打开时的游标。导致指针到了最后一条记录上了。
  参考一下手册上提供的例子
  Example Script
  Dim sPro As String
  Dim sDsn As String
  Dim sSer As String
  Dim sCon As String
  Dim sSql As String
  Dim conn As Object
  Dim oRs As Object
  Dim oCom As Object
  Dim oItem As ListItem
  Dim m, n, s
  '1.1 Make connection string for ADODB
  sPro = "Provider=WinCCOLEDBProvider.1;"
  sDsn = "Catalog=CC_OpenArch_03_05_27_14_11_46R;"
  sSer = "Data Source=.\WinCC"
  sCon = sPro + sDsn + sSer
  ' 1.2 Define command text in sSql (relative time)
  sSql = "TAG:R,'PVArchive\Tag1','0000-00-00 00:10:00.000','0000-00-00
  00:00:00.000'"
  'sSql = "TAG:R,1,'0000-00-00 00:10:00.000','0000-00-00 00:00:00.000'"
  MsgBox "Open with:" & vbCr & sCon & vbCr & sSql & vbCr
  ' 2.1 Make connection
  Set conn = CreateObject("ADODB.Connection")
  conn.ConnectionString = sCon
  conn.CursorLocation = 3
  conn.Open
  ' 2.2 Use command text for query
  Set oRs = CreateObject("ADODB.Recordset")
  Set oCom = CreateObject("ADODB.Command")
  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
  ListView1.ColumnHeaders.Clear
  ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(1).Name), 140
  ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(2).Name), 70
  ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(3).Name), 70
  If (m > 0) Then
  oRs.MoveFirst
  n = 0
  Do While Not oRs.EOF
  n = n + 1
  s = Left(CStr(oRs.Fields(1).Value), 23)
  Set oItem = ListView1.ListItems.Add()
  oItem.Text = Left(CStr(oRs.Fields(1).Value), 23)
  oItem.SubItems(1) = FormatNumber(oRs.Fields(2).Value, 4)
  oItem.SubItems(2) = Hex(oRs.Fields(3).Value)
  If (n > 1000) Then Exit Do
  oRs.MoveNext
  Loop
  oRs.Close
  Else
  End If
  Set oRs = Nothing
  conn.Close
  Set conn = Nothing

提问者对于答案的评价:
说的不错,就是没有设置游标属性,谢谢回答!

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

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

相关推荐

  • 通讯故障导致报警记录丢失

    一台机器用S7-317做设备控制和MP377 做人机界面,历史报警记录本来显示正常。可是一天突然通讯发生故障,不能显示机器运行数据。机器重启后,通讯恢复正常后,发现昨天的…

    SIMATIC WinCC 2019年6月11日
  • Wincc7.5打不开项目,报找不到服务器,急!

    wincc7.5 打开Wincc7.2项目,打不开。移植的时候报是最新的,不需要移植。 钻石用户推荐最佳答案 按下列步骤检查,没准你第一步就没完成哦: &nbs…

    SIMATIC WinCC 2020年11月1日
  • WINCC里建立的字符集变量如何作归档

    在WINCC里,建立了一个类型为 文本变量8位字符集,对应PLC里的DB块里的值。运行中,字符集显示正常,可是在变量归档里不能作这种类型的变量的归档。我又看了用户归档,倒…

    SIMATIC WinCC 2019年6月11日
  • wincc名称中带点的变量怎么建立的啊

    新建WINCC变量时,点“."输入不了,请教下各位大侠啊是什么原因啊… 最佳答案 带点的是结构变量,你先建立一个结构,然后建立变量,数据类型为你建立的结构,然后就会出…

    SIMATIC WinCC 2021年7月5日
  • wincc运行过程中的问题

    当画面运行时,带动画的图形运行时才为绿色.可是在没运行时,有时会出现绿色的虚假现象,但实际设备并未运行.当切换几次画面后,便恢复正常.我的动画是在C脚本里做的!!不知是什么原因? …

    SIMATIC WinCC 2019年6月11日
  • 如何在不同的组态画面显示不同的报警信息

    系统里有好几个画面上有报警控件,需要在不同的画面中显示与该画面对应的报警信息该如何做 最佳答案 报警控件设置过滤功能。 提问者对于答案的评价:具体怎么过滤啊 专家置评 1.双击报警…

    SIMATIC WinCC 2017年8月15日
  • PC ACCES 为何总断线?

    现有一个项目,采用 200cpu,搭配cp243-1模块,用网线与上位机通讯,网线大约100米。上位机采用v1.0 pc acces软件做OPC服务器…

    SIMATIC WinCC 2021年7月5日
  • wincc 7.4安装时出现安装要求尚未满足

    安装wincc 7.4时出现下列产品的安装要求尚未满足:WinCC V7.4 Standard该系统上已安装了 WinCC V11…

    SIMATIC WinCC 2021年7月5日
  • WINCC的VB脚本故障

    我想把S7-300的DB1中的一个“INT”型的变量先做数学运算后再在WINCC上显示。设了一个变量objvar1,先声明,来表示这个变量。可是写“objvar1.read”的时候…

    SIMATIC WinCC 2019年6月11日
  • Wincc新建工程提示 #3149

    新安装的Wincc 7.0,新建工程时提示 idispatch error #3149,是什么原因呢?按确定后提示工程无法键立,是安装的问题…

    SIMATIC WinCC 2019年6月11日