可能标题简述的不太明白。我正在写一个变量下降沿触发全局脚本的动作,触发变量为c,脚本代码如下,作用为变量c的下降沿读取数据库并按时间筛选前10条记录显示在listview控件上。因为需要判断变量的下降沿,所以用到了IF...END IF,但在里面嵌套的DO WHILE感觉一直没结束,所以运行时触发变量c下降沿无法实现此功能。 但是,如果我在画面上用一个按钮的鼠标单击事件写入下面不含IF语句的脚本就能实现。所以,现在请教各位,下面这段代码问题出在哪里?或者说有没有更好的办法!谢谢给各位了!
Dim Sql
Dim sCom
Dim oRs
Dim conn
Dim oCom
Dim Con
Dim n, i, dyx, oItem
Dim c1, d1
c1 = HMIRuntime.tags("c").read
d1 = HMIRuntime.tags("d").read
'变量c下降沿触发动作
If c1 =0 And d1 =1 Then
Set dyx = ScreenItems("控件9")
dyx.ListItems.Clear '清除表格内容。
'连接数据库
Con="Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=测试专用;Data Source=SLOANE.\WINCC"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString= Con
conn.CursorLocation=3
conn.Open
'读取数据库
'下面语句为查询数据库SELECT语句
Sql="SELECT TOP 10 * FROM DBO.车流统计 ORDER BY 时间 DESC"
'标准的数据库操作属性和方法
Set oRs=CreateObject("ADODB.Recordset")
Set oCom=CreateObject("ADODB.Command")
Set oCom.ActiveConnection=conn
oCom.CommandType=1
oCom.CommandText=Sql
Set oRs=oCom.Execute
n = oRs.RecordCount '查询到的条数。
If (n > 0) Then
oRs.MoveFirst
i = 0
End If
Do While Not oRs.EOF '是否到记录末尾,循环填写表格
Set oItem = dyx.ListItems.Add()''添加新行
oItem.Text=CStr(oRs.Fields(0).Value)
oItem.SubItems(1)=CStr(oRs.Fields(1).Value)
oItem.SubItems(2)=CStr(oRs.Fields(2).Value)
oRs.MoveNext
Loop
'关闭数据库连接,释放资源。
Set oRs = Nothing
conn.close
Set conn = Nothing
end if
hmiruntime.tags("d").write c1
问题补充:
激活运行之后,动作触发之后,listview没有添加数据
最佳答案
用变量触发脚本,应该实在全局脚本中写的,但是全局脚本并不能直接调用画面中的对象,所以按钮里可以执行,全局脚本就不行了,需要在调用画面对象的地方,先调用该画面。2606352062,欢迎交流
提问者对于答案的评价:
灰常感谢,就是没调用画面对象,改成Set dyx = HmiRuntime.Screens("起始画面").ScreenItems("控件9")就好了,谢谢!!!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc359311.html