1、按照提供的“在WinCC中如何使用VBS读取报警记录数据到EXCEL.pdf“中的文档操作,运行结果总是提示没有所需数据;
2、后来我从下载中心下载了标准项目,里面有写好的代码,我修改了代码中的模版路径,但是仍然提示没有所需数据;
3、仔细检查了语法和连接及查询命令,实在找不到原因,还请大神们指导,不胜感激。。
Sub OnClick(Byval Item)
'变量定义和初始化
Dim sPro,sDsn,sSer,sCon,conn,sSql,oRs,oCom
Dim tagDSNName
Dim m,i
Dim objExcelApp,objExcelBook,objExcelSheet,sheetname
Dim MySqlStr
Set MySqlStr = HMIRuntime.Tags("MySqlStr")
item.Enabled = False
On Error Resume Next
sheetname="Sheet1"
'打开Excel模板
Set objExcelApp = CreateObject("Excel.Application")
'objExcelApp.Visible = False
objExcelApp.Workbooks.Open "D:\WinCC\Mode.xlsx"
objExcelApp.Worksheets(sheetname).Activate
'准备查询条件 Catalog
Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT")
tagDSNName.Read
'创建数据库联接
sPro = "Provider=WinCCOLEDBProvider.1;"
sDsn = "Catalog=" &tagDSNName.Value& ";"
sSer = "Data Source=YELZ\WinCC"
sCon = sPro + sDsn + sSer
Set conn = CreateObject("ADODB.Connection")
Msgbox sCon
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open
'定义查询的命令文本 SQL
MySqlStr.Read
sSql = "ALARMVIEW:Select * FROM AlgViewCHT "&MySqlStr.Value
MsgBox sSql
HMIRuntime.Trace "Sql is: " & sSql & vbCrLf
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
'填充数据到Excel中
Set oRs = oCom.Execute
m = oRs.RecordCount
If (m > 0) Then
oRs.MoveFirst
i=3
Do While Not oRs.EOF '是否到记录末尾,循环填写表格
objExcelApp.Worksheets(sheetname).cells(i,1).value= CStr(oRs.Fields(0).Value)
objExcelApp.Worksheets(sheetname).cells(i,2).value= CStr(oRs.Fields(1).Value)
objExcelApp.Worksheets(sheetname).cells(i,3).value= CStr(oRs.Fields(2).Value)
objExcelApp.Worksheets(sheetname).cells(i,4).value= CStr(oRs.Fields(37).Value)
oRs.MoveNext
i=i+1
Loop
oRs.Close
Else
MsgBox "没有所需数据……"
item.Enabled = True
Set oRs = Nothing
conn.Close
Set conn = Nothing
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp= Nothing
Exit Sub
End If
'释放资源
Set oRs = Nothing
conn.Close
Set conn = Nothing
'生成新的文件,关闭Excel
Dim patch,filename
filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))+CStr(Minute(Now))&CStr(Second(Now))
patch= "d:\Record\"&filename&"demo.xlsx"
objExcelApp.ActiveWorkbook.SaveAs patch
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp= Nothing
MsgBox "成功生成数据文件!"
item.Enabled = True
End Sub
问题补充:
现在程序应该只运行到判断m值处,因为m等于0,所以提示没有数据!不知道是哪儿的原因!
图片说明:
最佳答案
你这是查询报警记录。
第一步,先看看报警记录控件里产生了报警。
其次
问题出在查询语句上,也许是语言错误导致的没有数据。
sSql = "ALARMVIEW:Select * FROM AlgViewCHT "&MySqlStr.Value
这一句,首先可以去掉后边的"&MySqlStr.Value ,他只是一个条件,先不添加条件,也许是条件错误。
再次,sSql = "ALARMVIEWEX:Select * FROM AlgViewEXENU ",好像是可以这样写的,因为中文字符的问题。
这两种方法都可以试试。
最后说一句。不要随便从网上找一个脚本就拿过来改,成功率很低的,官网的文档也都是人做的,也会出错。不要盲目信服。同一个脚本我能运行,你就报错,这种情况很常见。
2606352062欢迎交流。
提问者对于答案的评价:
换成英语报警消息归档数据后,解决。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc357040.html