以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 手机端获取表数据的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178407)

--  作者:liujie6215
--  发布时间:2022/7/3 15:04:00
--  [求助] 手机端获取表数据的问题

老师您好:


Forms("1-报价输入").Controls("btn-ksbj").PerformClick() \' 模拟按键,进行一个计算,每次计算时间都在10-600秒之间
Forms("设计输入").TimerEnabled = True  \'启动计时器

If bjcgbz=1 And bjlcjlbz = 2  \'这两个参数是计算完成后的标志值。
With wb.AddTable("","Table1")
         .CreateFromDataTable(DataTables("产品报价表"),True,"材料规格 is not null or 金额>0","","类别","材料名称","材料规格","单位","数量","单价_元","金额" )
 End With
End If

在计时器中:

e.Form.TimerInterval = 5000

If bjcgbz=1 And bjlcjlbz = 2  Then   \'报价成功标志

e.Form.TimerEnabled = False

End If

我的意思是,计时器当检测到两个标志值时,就终止计时器,创建table1,不知我哪里错了,始终不能创建表taible1,找了很长时间,也没有发现问题,麻烦老师,给看看,问题出在什么地方?

 

 

 

[此贴子已经被作者于2022/7/3 15:05:13编辑过]

--  作者:有点蓝
--  发布时间:2022/7/3 21:10:00
--  
服务端程序建议使用计划管理,不要使用窗口计时器。

服务处理是即时的,没有办法等待计时器结束。应该在前端使用js计时器,定时查询服务端的状态。差不多这样吧

HttpRequest事件代码:

Select Case e.Path
    Case "启动计算.htm"
     \'开启计时器启动计算
        e.WriteString(“已启动计算”) \'生成网页
    Case "查询结果.htm"
If bjcgbz=1 And bjlcjlbz = 2  \'这两个参数是计算完成后的标志值。
Dim wb As New weui
With wb.AddTable("","Table1")
         .CreateFromDataTable(DataTables("产品报 价表"),True,"材料规格 is not null or 金额>0","","类别","材料名称","材料规格","单位","数量","单价_元","金额" )
 End With
e.WriteString(wb.Build) \'生成网页
else
e.WriteString(“计算未结束”) \'生成网页
End If

End Select

即使这样仍然是有问题的,因为计时器也好,计划管理也好,其实都是处于主线程的,如果计算费时仍然是会卡住主线程。比较合理的可以在计时器或者计划管理里调用异步函数进行计算。或者干脆再开一个程序进行计算

--  作者:liujie6215
--  发布时间:2022/7/4 10:09:00
--  感谢蓝老师

通过您的多次帮助,我可以尝试通过其他方式进行尝试。不知用do  loop 循环,每隔2秒循环一次可行?但不知道怎么去写。您抽空的话,再给指点一下。

 

[此贴子已经被作者于2022/7/4 10:10:18编辑过]

--  作者:有点蓝
--  发布时间:2022/7/4 10:27:00
--  
https://www.baidu.com/baidu?ie=UTF-8&word=js%E8%AE%A1%E6%97%B6%E5%99%A8%E5%87%BD%E6%95%B0

https://www.runoob.com/w3cnote/js-timer.html