荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: 增强FoxPro程序命令执行过程的可视性
发信站: BBS 荔园晨风站 (Wed Jan 27 17:52:56 1999), 转信
FoxPro 2.5 For Dos是目前使用最广泛的数据库编程语言,其命
令、函数多,且功能强大。但美中不足的是,有些命令(如"COPY TO…
和PACK"等)虽然可用一个语句就能完成预定工作,但命令的执行过程
是通过FoxPro内部运行来实现的,其可视性差,特别是在处理庞大的数
据库时,屏幕会出现呆滞现象,同时也不知道计算机的工作进程,甚至
有时死机也不知道,时间长了往往会造成操作人员的乏味。
能不能在FoxPro程序执行过程中增强其可视性,使屏幕活动起来
呢?
回答是肯定的。下面笔者将增强"COPY TO…"和"PACK"两个命令
的可视性应用函数提供给大家。(其界面仿Windows 95中文件拷贝及
清空回收站效果,同时温度计也标明了工作进程,在实际应用中收效甚
好。)
函数清单如下:
u_Vcopy 可视数据库拷贝函数(与copy to……同效)
格式:=u_Vcopy<源库名>,<目的库名>,[条件])
FUNC u_Vcopy
PARA x_1,x_2,x_3
PRIV ALL LIKE x_*
SET TALK OFF
if empt(x_1)or empt(x_2)
wait '调用格式:=u_Vcopy(<源库名>,<目的库名>,[条件])'
wind nowa
retu
endi
@ 0,0,24,80 BOX REPL(chr(176),9)
x_safe=set('safe')
x_sele=sele(0)
x_w='w'+sys(3)
DIME x_C(4)
x_C(1)='' &&区位码:1385
x_C(2)='' &&区位码:1386
x_C(3)='' &&区位码:1387
x_C(4)='' &&区位码:1388
DEFI WIND(x_w) FROM INT((SROW()-6)/2),INT((SCOL()-57)/
2);
TO INT((SROW()-6)/2)+6,INT((SCOL()-57)/2)+57;
DOUB COLO SCHE 5 TITL '正在拷贝'
ACTI WIND(x_w)
@ 2,1 to wrow(),wcol()-2
SET SAFE OFF
sele 0
use(x_1)
x_selel=sele(0)
copy stru to (x_2)
sele 0
use(x_2)
x_sele2=sele(0)
sele (x_sele1)
if empt(x_3)
x_coun=recc()
else
set filt to &x_3
coun to x_coun
endi
go top
stor 1 to x_i,x_j,x_k
x_spac=int((wcol()-16)/2)*2
x_speed=int(x_coun/iif(x_coun<20,x_coun,20))
x_coun=(wcol()-7)/x_coun
DO WHIL not eof()
@ 1,2 say PADR(ALLT(str(recn(),5)),5,'.')
@ 1,8 say ''+spac(x_spac)+'' &&区位码:1285 121
6
@ 1,8+x_i*2 say x_C(x_j)+iif(x_i=x_spac/2,'','')&&
区位码:1217
@ 3,3+x_k*x_coun say' ' COLO 7/7*
scat to x_arra
inse into(x_2)from arra x_arra
SKIP
if x_k/x_speed=int(x_k/x_speed)
x_i=iif(x_i=x_spac/2,1,x_i+1)
x_j=iif(x_j=4,1,x_j+1)
endi
x_k=x_k+1
ENDD
@ 1,8 say ''+spac(x_spac)+'' &&区位码:1285 1217
use in (x_sele1)
use in (x_sele2)
sele(x_sele)
RELE WIND (x_w)
SET SAFE &x_safe.
RETU
FUNC u_Vpack
PRIV ALL LIKE x_
SET TALK OFF
if used()=.F.
wait' 数据库未打开!' wind nowa
retu
endi
@ 0,0,24,80 BOX REPL(chr(176),9)
x_safe=set('safe')
x_sele=sele(0)
x_w='w'+sys(3)
x_FILE=strt(dbf(),sys(5)+curd())
DIME x_C(4)
x_C(1)=''
&&区位码:1385
x_C(2)=''
&&区位码:1386
x_C(3)=''
&&区位码:1387
x_C(4)=''
&&区位码:1388
DEFI WIND(x_w)FORM INT((SROW()-6)/2),INT((SCOL()-57)/2
);
TO INT((SROW()-6)/2)+6,INT((SCOL()-57)/2)+57;
DOUB COLO SCHE 5 TITL '正在删除'
ACTI WIND(x_w)
@ 2,1 to wrow(),wcol()-2
SET SAFE OFF
x_F='x'+righ(sys(3),7)+' DBF'
copy stru to (x_F)
sele 0
use (x_F)
x_selel=sele(0)
sele(x_sele)
x_coun=recc()
go top
stor I to x_i,x_j,x_k
x_spac=int((wcol()-16)/2)*2
x_speed=int((x_coun/iif(x_coun<20,x_coun,20))
x_coun=(wcol()-7)/x_coun
DO WHIL not eof()
@ 1,2 say PADR(ALLT(str(recn(),5)),5,'.')
@ 1,8 say ''+spac(x_spac)+'','')&&区位码:1287 1284
@ 1,8+x_i*2 say x_C(x_j)+iif(x_i)=x_spac/2,'','')&&区
位码:1283
@ 3,3+x_k*x_coun say'' COLO 7/7*
if not dele()
scat to x_arra
inse into (x_F)from arra x_arra
endi
SKIP
if x_k/x_speed=int(x_k/x_speed)
x_i=iif(x_i=x_spac/2,1,x_i+1)
x_j=iif(x_j=4,1,x_j+1)
endi
x_k=x_k+1
ENDD
@ 1,8 say''+spac(x+spac)+'' &&区位码:1216 1283
use in(x_selel)
sele(x_sele)
use.
DELE FILE(x_FILE)
RENA(x_F) to (x_FILE)FILE)
use (x_FILE)
RELE WIND (x_w)
SET SAFE &x_safe.
RETU
程序在UCDOS 3.1及以上版本
FoxPro 2.5 For DOS下运行通过。
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店