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日 上午10:56

相关推荐

  • WINcc里怎么实现流动块和风扇的转动

    流动块:表现水的流向动画风扇:表现电动机运行的动画谢谢各位 最佳答案 1、流动块可以使用以下链接中的附件http://www.ad.siemens.com.cn/club/bbs/…

    SIMATIC WinCC 2019年6月11日
  • 两台上位机显示wincc报警的问题

    两台上位机显示wincc报警的问题。两台上位机是通过交换机连接到PLC的CP343-1.报警连接的是PLC的输入。但是有报警时,其中一台有报警,另外一台却没有报警。报警记录里设置是…

    SIMATIC WinCC 2019年6月11日
  • 寻WinCC Tag Simulator

    我的WinCC是PCS7里的,没有WinCC tag simulator组件,哪位有单独的安装组件,发给我一下啊!万分感谢! 最佳答案 PCS7里面的Wincc…

    SIMATIC WinCC 2019年6月11日
  • 怎样将设备启动及停止的时间点显示在wincc上

    请问怎样将设备启动和停止的具体时间点显示在wincc上?这两个时间点之差可以再wincc里面实现相减么?请高手帮忙指导一下 最佳答案 A、简单的方法就是在PLC内部实现,&nbsp…

    SIMATIC WinCC 2017年6月27日
  • WINCC 画面标题

    WINCC  在画面中如何设计标题,可否设计标题,比如体现项目或公司名称 最佳答案 参考下面的答案——WinCC画面标题显示:http://www.ad.sie…

    SIMATIC WinCC 2019年6月11日
  • 用OS项目编辑器生成的,运行画面最上边区域选择按钮旁的报警小框怎么去掉?

    不想要旁边的报警按钮 太占地方,我的项目小不需要那个 用的是WINCC7.0。各位大神给指点下拜托啦 最佳答案 找的初始画面,一个一个找,找到你想删掉的按钮,删…

    SIMATIC WinCC 2017年6月6日
  • 为什么项目文件夹会自动共享

    为什么项目在激活运行后,项目文件夹会自动共享?有什么作用? 最佳答案 1。WinCC项目在激活运行后,项目文件夹被WinCC系统自动加上共享属性,目的是项目文件夹能通过联网的其它W…

    SIMATIC WinCC 2019年6月11日
  • wincc上电后显示第一页

    如何让Wincc上电后始终显示我想让它显示的那一页?如何设置? 最佳答案 在WinCC的计算机属性里设置!或是在你想初始显示图片点击右键,设置启动画面就好了! 提问者对于答案的评价…

    SIMATIC WinCC 2019年6月11日
  • wincc 与TCP/IP协议

    终端机器(如柴油机,发电机,)以485形式输出,我想通过458网关,转成TCP/IP格式,可以与上位机wincc电脑连接吗?如果可以应该怎么设置wincc,如果不可以,那应该怎样才…

    SIMATIC WinCC 2019年6月11日
  • 关于opc通讯的几个问题。

    系统中采用的了opc通讯,采用kepware与s7-200 smart通讯,经过测试通讯正常,现场还有一套倍福CX1020系统,需要与上位wincc链接,计划也采用opc…

    2021年7月5日

发表回复

登录后才能评论