VB访问WINCC过程值归档数据库

VB连接WINCC数据库,运行提示无效的类别字符串,以下是代码,大家帮忙看看是哪里的问题:
 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

 ''#为ADODB创建connection string
 sPro = "Provider = WinCCOLEDBProvider.1;"
 sDsn = "Catalog = CC_test_08_01_20_22_27_54R;"
 sSer = "Data Source = .\WinCC"
 sCon = sPro + sDsn + sSer

 ''#在sSql定义命令文本(相对时间)
 sSql = "TAG:R,''PVArchive1\Tag1'',''0000-00-00 00:00:00.000'',''0000-00-00 00:00:00.000''"
 ''sSql = "TAG:R,1,''0000-00-00 00:00:00.000'',''0000-00-01 00:00:00.000''"
 MsgBox "Open with:" & vbCr & sCon & vbCr & sSq1 & vbCr

 ''#建立连接
 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
 m = oRs.Fields.Count

 ''#用记录集填充标准listview对象
 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

问题补充:
============Provider============
  Application : PDLRT
  Picture  : NewPdl0.pdl_Events
  Function  : Sub 按钮1
  Line  : 1
  Error  : 无效的类别字符串
  ============Provider============

 谢谢城外之人,谢谢大家,代码中是单引号,但不知道为什么贴上来就变成双引号了,连注释部分都自动变化了

最佳答案

你这段代码应该是WINCC的一个按钮事件的VBS脚本吧。是看到你的问题补充得出的结论,这段代码是纯VB代码,而WINCC的vb是VBS,只是VBA的一个子集,他不支持Dim sPro As String这样的定义,应该写成这样Dim sPro 

 还有:
 sDsn = "Catalog = CC_test_08_01_20_22_27_54R;"
  这句话要和你的wincc的RT数据库一致
 如果我写的话就不用OLEDB了直接这么写sDsn="PROVIDER=MSDASQL;dsn=CC_test_08_01_20_22_27_54R;uid=;pwd=;"

 然后你只是处理了读数据的操作,直接用Connection的EXECUTE方法就可以了,不用再打开Command和RecordSet对象了,这样对系统的开销要小一点。

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

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

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

相关推荐

  • 是什么问题

    wincc6.0sp2在虚拟机里安装,快结束是报错,0xc0000005,然后用授权工具授权不了,一直是演示模式,那位前辈能帮忙解答一下,感谢 图片说明:   …

    2020年11月1日
  • VBS的动作只执行一次

    用一个标志位控制VBS动作.当标志位从0变为1时,动作执行一次;当标志位从1变为0时或没有改变时,动作不执行.用WINCC自带的信息/触发功能,动作会触发很多次.有方法解决吗? 最…

    SIMATIC WinCC 2019年6月11日
  • wincc 显示

    我有个项目,wincc的底图使用3D的图, 底图上 设备 的颜色为 黑色。 另有拷贝的单个设备的图片颜色为:绿色(运行)、红色(停…

    SIMATIC WinCC 2021年7月5日
  • 装了simatic net的电脑wincc不能访问远程opc服务器?

    如题,两台装了simatic net的电脑,wincc只能访问本地opc不能访问局域网内的OPC服务器(此服务器在没装simatic NET的机器上是可以被访问…

    SIMATIC WinCC 2021年7月5日
  • 关于wincc脚本指令的问题

    那位大牛有wincc中c语言脚本的命令含义的汇总手册,麻烦发我一份,最好带有指令后面参数的详细解析,谢谢1287751010@qq.com 最佳答案 参考资料:http://wen…

    SIMATIC WinCC 2021年7月5日
  • DTS数据转化

     1.P249页的第四步,组态数据传输,我想查看例如:Tag这个 变量 在某个时间段的报警消息,这个语句怎么写啊? 我用的6.0的版本,书上…

    SIMATIC WinCC 2019年6月11日
  • WINCC的安装

    我在安装WINCC时提示我要安装microsoftSQL2000(instanz wincc)和microsoft massage queuing,请…

    SIMATIC WinCC 2019年6月11日
  • win10系统下用vbs脚本打开excel 2013代码如何写?

    我再win7系统下用vbs脚本可以打开excel 2007,    excelpath=HMIRuntime.ActiveProj…

    SIMATIC WinCC 2021年7月5日
  • WinCC怎样隐藏(退出)当前弹出的画面窗口!

    在一个画面中加入了一个窗口对象A,设定了A为隐藏,当用画面中的按钮调用这个窗口对象A的画面时,让这个A的画面可见(弹出),在弹出的A画面中有一个按钮b,怎样实现点击b来隐藏A的画面…

    2020年11月1日
  • 怎样捕捉报警产生时的消息

    自己想监测一下在产生消息时,都弹出一个对话框来提示操作人员有报警产生,弹出的信息用messagebox就可以解决了,但用什么事件来触发messagebox呢,找了一下c脚本编辑器中…

    SIMATIC WinCC 2019年6月11日