| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6136 人关注过本帖
标题:如果想运行一段程序期间弹出写有“请稍等”的表单,运行完成后“请稍等”自 ...
只看楼主 加入收藏
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
如果这种方法可以的,我将完善一下代码,定制信息窗口,自动调整窗口的大小,可以多行显示,可以有进度条,完成后音乐提醒。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 09:35
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:1 
回复 10楼 aaaaaa
Function WaitBox
    Define Window Wparent ;
        FROM 0, 0 To 5, 50 ;
        Font "宋体", 12 Style "BT" ;
        DOUBLE Color Scheme 7
    Move Window Wparent Center
    Activate Window Wparent
    @ 2, 2 Say "正在处理数据,请稍等片刻......"
    Activate Screen
Endfunc
你这个显示,要是能动就多好阿。。
我是想用到从SQL2000上读取数据用途。
比如,我从SQL2000上读取数据时
sqlexec(nhandle,'select * from 表1','sql_table') &&如果表中有很多记录,比如10000条,中间会停顿很长时间,特别是从外网读取数据。

*我目前是用
wait window nowait "正在读取数据,请稍后..."
sqlexec(nhandle,'select * from 表1','sql_table')
wait clear


[此贴子已经被作者于2016-3-31 11:58编辑过]

2016-03-31 11:53
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
这个示例仅仅是改良版的 Wait 命令,如果要有动态的进程条、计时、倒计时、音乐提醒等扩展功能,如果楼主需要的,我再增强一些。
不知道我能行不?
试试看吧。

[此贴子已经被作者于2016-3-31 12:05编辑过]


民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 12:04
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
*!*    带进度条的 SQL 查询 (字符版):
Create Cursor Temp (test i)
Local I
For I = 1 To 10000
    Insert Into Temp Values (I)
Endfor

Select * From Temp Where Progress(Test)
Return


Procedure Progress(tnIncrement)
    Wait At 10, 10 "正在查询 : " + Transform(m.tnIncrement) + " of " + Transform(Reccount("Temp")) Window NoWait
Endproc

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 16:54
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
不要过度迷信进度条,因为 VFP 不是多进度多进程的软件,而且中间的运行过程不好俘获,大部分的语句是同步方式的,所以进程条的刻度很难采集。
下面是三种创建索引方式的速度比较:

Set Talk Off
Clear
Set Excl On
Clear
Create Cursor Test (cfield C(1))
For I = 1 To 100000  && 10W 条记录
    Append Blank
Endfor


*!*    方法一:无进度条:0.5秒
a1=Seconds( )
Index On cfield Tag slowindex
? '自然索引 : ' + Str(Seconds( )-a1,6,4) + ' 秒'


*!*    方法二:进度条类:22秒
oProgress=Createobject("myThermo")
oProgress.nMaxValue=Reccount()
oProgress.nValue=1
oProgress.Show()
a1=Seconds( )
Index On IndexProgress(cfield , Recno(), Reccount()) Tag SlowIndex
oProgress.Release()
? '进度条类索引 : ' + Str(Seconds( )-a1,6,4) + ' 秒'


*!*    方法三:Wait 命令方法:75秒
a1=Seconds( )
Index On IndexProgress2(cfield , Recno(), Reccount()) Tag slowindex
? 'Wait Window 索引 : ' + Str(Seconds( )-a1,6,4) + ' 秒'
Wait Clear

Use


Function IndexProgress2(tcValue, tnRecno, tnReccount)
    Wait Window "正在索引,记录号:" + Transform(tnRecno) + " of " + Transform(tnReccount) NoWait
    Return tcValue
Endfunc


Function IndexProgress(tcValue, tnRecno, tnReccount)
    oProgress.nValue=tnRecno
    oProgress.Refresh()
    Return tcValue
Endfunc


**************************************************
Define Class mythermo As Form
    ShowWindow=2
    Height = 100
    Width = 420
    Desktop = .T.
    ScrollBars = 0
    DoCreate = .T.
    AutoCenter = .T.
    BorderStyle = 2
    Caption = " Percent of perfoming"
    HalfHeightCaption = .F.
    TitleBar = 0
    BackColor = Rgb(128,128,128)
    ncurrentvalue = 1
    nincrementvalue = 1
    nMaxValue = 100
    Name = "mythermo"
    nValue = .F.

    Add Object TEXT1 As TextBox With ;
        Height = 25, ;
        Left = 6, ;
        Top = 42, ;
        Width = 400, ;
        BackColor = Rgb(214,214,171), ;
        Name = "Text1"

    Add Object shp_progress_bar As Shape With ;
        Top = 44, ;
        Left = 6, ;
        Height = 23, ;
        Width = 20, ;
        BackStyle = 1, ;
        BackColor = Rgb(255,255,0), ;
        BorderColor = Rgb(255,255,0), ;
        Name = "Shp_progress_bar"


    Add Object lbl1 As Label With ;
        AutoSize = .T., ;
        FontBold = .T., ;
        FontSize = 10, ;
        Alignment = 0, ;
        BackStyle = 0, ;
        Caption = "0%", ;
        Height = 18, ;
        Left = 162, ;
        Top = 47, ;
        Width = 19, ;
        ForeColor = Rgb(64,0,128), ;
        Name = "Lbl1"

    Add Object Lbl_High As Label With ;
        AutoSize = .T., ;
        FontBold = .T., ;
        FontSize = 10, ;
        Alignment = 0, ;
        BackStyle = 0, ;
        Caption = "正在创建索引", ;
        Height = 18, ;
        Left = 71, ;
        Top = 12, ;
        Width = 71, ;
        ForeColor = Rgb(255,255,128), ;
        Name = "lbl_high"


    Protected Procedure incrementvalue
        *-- Increment the current value
        This.ncurrentvalue = This.ncurrentvalue + This.nincrementvalue

        *-- Increase the size of the progress bar
        This.shp_progress_bar.Width = 400 * (This.ncurrentvalue / This.nMaxValue)
        Thisform.lbl1.Caption=Str(This.ncurrentvalue / This.nMaxValue)+' %'
        Thisform.Refresh
    Endproc


    Procedure nvalue_access
        *To do: Modify this routine for the Access method
        */ ACTION.PRG
        Lparameters vNewVal

        If Type ("vNewVal") = "N"

            This.nValue = m.vNewVal

            This.shp_progress_bar.Width = 400 * (This.nValue / This.nMaxValue)
        Else
            =Messagebox ("wrong data type")
        Endif
        *****RETURN THIS.nValue
    Endproc


    Procedure nvalue_assign
        Lparameters vNewVal

        *-- Test the data type
        If Type("vNewVal") = "N"

            *-- Set the value of the property
            This.nValue = m.vNewVal

            *-- Increase the size of the progress bar
            This.shp_progress_bar.Width = 400 * (This.nValue / This.nMaxValue)
            Thisform.lbl1.Caption=Str(This.nValue*100 / This.nMaxValue)+' %'
            *Thisform.refresh
        Else
            =Messagebox("Invalid data type.")
        Endif

    Endproc


Enddefine
*
*-- EndDefine: mythermo
**************************************************

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 16:59
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
SQL Server 好像有同步和异步方式:
SQLSETPROP(lnConn, "Asynchronous", .T.)
SQLSETPROP(lnConn, "BatchMode", .F.)
CURSORSETPROP("FetchAsNeeded", .T.)

在异步方式下,用 SQLMORERESULTS 采集记录号,显示其进度刻度。
我这里没有 SQL Server,不能测试,有兴趣的同志们自己试试看。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 17:13
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 16楼 aaaaaa
好的。
2016-03-31 17:29
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
SQL Server 异步方式带进程条查询的示例:
http://www.

也可以用 VFP 9 软件中的 ffc\_therm.vcx 的示例做:
原始的代码在这里:https://bbs.bccn.net/viewthread.php?tid=462446&page=3#pid2556743

Clear
Local loTherm
loTherm = Newobject("_thermometer", Home() + "ffc\_therm.vcx", "", "正在处理数据")
loTherm.iBasis = Reccount()
loTherm.Show()

Create Cursor Test1 (Id Int Autoinc, Name C(10), XingBie C(2), PhoneNum C(5))
For I = 1 To 10000
    Insert Into Test1 (Name, XingBie, PhoneNum) Values(Sys(2015), Iif(Int(I/2) = I/2, '男', '女'), Sys(3))
Endfor

Select Id, Field(1) + ':' As 字段A, (Select Padl(Id, 10, " ")       As 字段B From Test1 Where Id = A.Id) From Test1 As A ;
    Union ;
Select Id, Field(2) + ':' As 字段A, (Select Name                    As 字段B From Test1 Where Id = A.Id) From Test1 As A ;
    Union ;
Select Id, Field(3) + ':' As 字段A, (Select XingBie                 As 字段B From Test1 Where Id = A.Id) From Test1 As A ;
    Union ;
Select Id, Field(4) + ':' As 字段A, (Select Padl(PhoneNum, 10, " ") As 字段B From Test1 Where Id = A.Id) From Test1 As A ;
    Where loTherm.UPDATE(RECNO(), "Record #" + Transform(recno()))  && Into Cursor Query

* Or :
* SCAN
*    loTherm.UPDATE(RECNO(), "Record #"+trans(recno()))
* ENDSCAN

()

Return


[此贴子已经被作者于2016-3-31 21:33编辑过]


民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-03-31 21:25
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用aaaaaa在2016-3-31 17:13:29的发言:

SQL Server 好像有同步和异步方式:
SQLSETPROP(lnConn, "Asynchronous", .T.)
SQLSETPROP(lnConn, "BatchMode", .F.)
CURSORSETPROP("FetchAsNeeded", .T.)
 
在异步方式下,用 SQLMORERESULTS 采集记录号,显示其进度刻度。
我这里没有 SQL Server,不能测试,有兴趣的同志们自己试试看。
CLEAR
csql=[driver=sql server;server=]+cServer+[;uid=]+cUid+[;pwd=]+cPwd+[;database=]+cdbs
nhandle=sqlstringconnect(csql)
LOCAL lnConn,lcQuery,lnRes
SQLSETPROP(nhandle,"Asynchronous",.t.)
lcQuery = "select bh,fyqj,df,sf,hj,sjh from wy_sdb where fyqj>='2016-01-01'"
DO WHILE .t.
   lnRes = SQLEXEC(nhandle,lcQuery,"tresult")
   DO CASE
      CASE lnRes = 0
           ?"Busy...",SECONDS()
           ?SQLMORERES(nhandle)  && Second result set
      CASE lnRes > 0
           ?"Ready!",SECONDS()
           EXIT
      CASE lnRes < 0
           ?"An error has occured!",,SECONDS()
           EXIT
   ENDCASE
   DOEVENTS
ENDDO
*我昨天在单位上的电脑,连接本地SQL没报错,但今天在家,连接外网的,报错。就是红字那句。
*另外,不知道怎么取异步已经下回来的记录数
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-04-02 16:44
ILoveVFD
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:218
专家分:147
注 册:2015-5-2
收藏
得分:1 
跟着学习了。
2016-04-02 17:40
快速回复:如果想运行一段程序期间弹出写有“请稍等”的表单,运行完成后“请稍等 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033248 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved