⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplyasynchronousread.prg

📁 固定资产管理系统源码..用于企业资产管理,用VFP编码
💻 PRG
字号:
LOCAL lnTotalFetchRec,lnTotalRec

nHandle=SQLSTRINGCONNECT("Driver=SQL Server;Server=(local);UID=sa;PWD=;Database=Northwind")
IF nHandle<=0
    =MESSAGEBOX("连接数据库服务器失败",0+48,"提示")
    RETURN 
ENDIF 

=SQLSETPROP(nHandle,"Asynchronous",.F.)  &&设置为同步传输

lnTotalRec=0      &&用于存储要读取记录的总数
nResult=SQLEXEC(nHandle,"SELECT COUNT(*) AS TotalRec FROM Orders","curMax")
IF nResult=1
    lnTotalRec=curMax.TotalRec
ELSE 
    =MESSAGEBOX("读取记录总数出错")
    =SQLDISCONNECT(nHandle)
    RETURN 
ENDIF 

=CURSORSETPROP("FetchAsNeeded",.T.,0)    &&设置按需要下载
=CURSORSETPROP("FetchSize",1,0)          &&设置每次读取1条记录,在实际编程时应当加大该值
=SQLSETPROP(nHandle,"Asynchronous",.T.)  &&设置为异步传输

PUBLIC llCancel
llCancel=.T.
SET ESCAPE ON     &&设置可以通过按ESC来终止数据读取
ON ESCAPE CancelRead(nHandle)

IF USED("curOrders")
    USE IN curOrders
ENDIF 

DO WHILE NOT USED("curOrders") AND llCancel=.T.  &&尝试读取第1条记录
    nResult=SQLEXEC(nHandle,"SELECT * FROM Orders", "curOrders")
ENDDO 

lnTotalFetchRec=0     &&用于存储已读取到的记录总数
IF USED("curOrders")
    IF lnTotalFetchRec<lnTotalRec
        lnTotalFetchRec=lnTotalFetchRec+1   &&curOrders表可用,表示读取到了1条记录
        _VFP.StatusBar="总记录数:"+STR(lnTotalRec)+"已读取:"+STR(lnTotalFetchRec)+;
            "完成"+STR(INT(lnTotalFetchRec*100/lnTotalRec))+"%" 
    ELSE 
        RETURN 
    ENDIF 
    =CURSORSETPROP("FetchAsNeeded",.F.,"curOrders")  &&重新设置要读取全部记录
ENDIF 

nResult=0
DO WHILE nResult=0 AND llCancel=.T.
    *!* 下面的SELECT语句不会被重新提交,VFP会检测到这只是一个状态监测
    *!* 只有在全部读取完毕,SQLEXEC才返回1,正在执行查询,将一直返回0
    *!* 根据前面的设置,每次读取1条记录到curOrders表
    nResult=SQLEXEC(nHandle,"SELECT * FROM Orders", "curOrders")
    
    IF lnTotalFetchRec<lnTotalRec
        lnTotalFetchRec=lnTotalFetchRec+1   &&curOrders表可用,表示读取到了1条记录
    ELSE 
        lnTotalFetchRec=lnTotalRec
    ENDIF 
    _VFP.StatusBar="总记录数:"+STR(lnTotalRec)+"已读取:"+STR(lnTotalFetchRec)+;
        "完成"+STR(INT(lnTotalFetchRec*100/lnTotalRec))+"%"
ENDDO 
=SQLDISCONNECT(nHandle)   &&断开连接

SELECT curOrders
BROWSE NOWAIT  

PROCEDURE CancelRead
    LPARAMETERS nHandle
    =SQLCANCEL(nHandle)       &&终止读取
    llCancel=.F.
ENDPROC 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -