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

相关推荐

  • SMART 700IE V3 连接电脑一直都在正在与设备进行连接 就不动了 怎么办

    软件我用的WinCC flexible SMART V3   屏的地址是192.168.2.22  …

    2021年7月5日
  • 怎么样把step7变量导入wincc

    怎么样把step7变量导入wincc中,变量太多了,一个一个建很麻烦 最佳答案 下载下面这个文档看看就没有问题了:http://ad.siemens.com.cn/download…

    SIMATIC WinCC 2019年6月11日
  • 离散报警 不能用 BOOL

    离散报警,触发变量里没有选项而且必须是 int型变量才能显示 。开关量报警是不是没法做报警  。不该数据类型的前提  B…

    2021年7月5日
  • WINCC 函数问题

    最近用到中英切换的函数了,我调用的SETLUANGUE这个函数,输入的英语ID号是0X0409,不过老是编译的时候出问题,是怎么回事!谁知道,wincc函数库的说明在哪下载啊! 问…

    SIMATIC WinCC 2019年6月11日
  • wincc与单片机的通讯

    wincc与四个单片机之间该如何做通讯 最佳答案 《单片机与组态王及WINCC的小结》连接: http://blog.gkong.com/more.asp?id=5003…

    SIMATIC WinCC 2019年6月11日
  • wincc 用户的登录与退出

    新手求助:WINCC组态差不多要完成了,现仅差一个“用户的登录与退出”,它是为了防止无关人员的胡乱操作。当按下WINCC项目管理器的运行键(向右的箭头)后,弹出登录对话框,上面有用…

    SIMATIC WinCC 2017年11月25日
  • wincc7.0 pc acess?

    操作系统:WIN7 32位, WINCC7.0 SP3亚洲版 , PC ACESS SP6, S7-…

    SIMATIC WinCC 2017年8月26日
  • WINCC如何按键实现趋势显示控件窗口的弹出

    WINCC如何按键实现趋势显示控件窗口的弹出要求在一个主界面上,按下按键弹出一个趋势显示控件,按下第二个按键,再弹出一个,前一个不关闭。两个趋势显示窗口都悬浮在主界面上。小弟新手,…

    SIMATIC WinCC 2019年6月11日
  • 上位机WINNC找不到OPC中变量

    4台200smartPLC同过OPC与WINCC通讯,OPC检测变量数据和wincc运行起来数据传输都没有问题,但在变量表里头无法找到PLC变量。 问题补充:无法找到稀油站的变量 …

    2020年11月1日
  • HMI显示字母

    如果我收到一个INT寄存器,但是我要使HMI上根据收到的INT值分别显示出ABCD等字母,要如何操作。另外如果是要根据收到的INT寄存器输出别的数字要如何操作。用I/O域没找到如何…

    2021年7月5日

发表回复

登录后才能评论