VBS脚本IF语句内嵌套DO WHILE无法结束

可能标题简述的不太明白。我正在写一个变量下降沿触发全局脚本的动作,触发变量为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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午10:56
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论