| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3192 人关注过本帖
标题:对VFP临时表使用PACK的方法
只看楼主 加入收藏
myhm
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-10-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
对VFP临时表使用PACK的方法
对VFP临时表使用PACK的方法
相信用过的朋友都知道,通常来说,VFP的临时表是不能使用PACK来完全删除做了DELETE标记的记录的。
那么,用什么方法可以把临时表中的DELETE标记记录删除呢?
其实很简单。
只要对临时表做一次增加字段的操作就可以了,
有强迫症的朋友,可以加一个无效字段,然后再删除就可以了。

举例如下:
crea curs LS表(A1 N(1),B2 N(1),C3 N(1))  &&做临时表 LS表
alte tabl LS表 add XX c(1)  &&给 临时表 LS表 增加一个字段XX
alte tabl LS表 drop XX  &&给 奖增加的字段删除
dime ss(3)
ss=1
for mma=1 to 100
    appe from arra ss
endf
?recc()
dele all for recn()>10
?recc()
pack
?recc()

运行显示:
100
100
10
搜索更多相关主题的帖子: VFP 方法 字段 临时表 删除 
2019-10-16 11:06
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1541
专家分:3003
注 册:2012-2-29
收藏
得分:5 
向你学习!
2019-10-16 13:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:5 
尽量不要用PACK,PACK命令的执行会有删除和重建原数据文件的过程,一是运行效率低,二是对此文件作控件绑定的数据源和共享数据表的操作不方便处理。
通常可先复制未删除的数据记录到临时表,然后用ZAP(运行效率高),再用APPEND FROM 将数据放回到原文件。
如:
CREATE CURSOR tt (f1 I, f2 I)
INSERT INTO tt VALUES (1, 11)
INSERT INTO tt VALUES (2, 22)
INSERT INTO tt VALUES (3, 33)
INSERT INTO tt VALUES (4, 44)
SELECT * FROM tt WHERE RECNO()%2==0 INTO CURSOR tmp
SELECT tt
ZAP
APPEND FROM DBF("tmp")
GO TOP
BROWSE
RETURN

2019-10-17 05:31
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2197
专家分:3838
注 册:2007-4-27
收藏
得分:5 
楼主的钻研精神值得学习

只求每天有一丁点儿的进步就可以了
2019-10-18 17:07
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1541
专家分:3003
注 册:2012-2-29
收藏
得分:0 
@吹版的方法很好!谢谢!
2019-10-18 19:37
sash
Rank: 4
等 级:业余侠客
威 望:6
帖 子:64
专家分:245
注 册:2014-4-25
收藏
得分:5 
其实,不用那么麻烦,既然是临时表,那么只要重建一下临时表就行了,例如:原来有个临时表,aaatmp里面有许多记录,也有一些标记已删除的记录。只要执行以下语句就行了:SELECT * FROM aaatmp WHERE !DELETE() INTO CURSOR aaatmp READ  
收到的鲜花
  • lsh042020-09-01 11:47 送鲜花  1朵   附言:推荐
2019-10-19 08:34
lsh04
Rank: 2
等 级:论坛游民
威 望:3
帖 子:32
专家分:15
注 册:2017-6-22
收藏
得分:0 
重新执行一次创建临时表语句就行了
2020-09-01 11:44
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
回复 3楼 吹水佬
学习了
2020-09-02 03:40
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
回复 3楼 吹水佬
受你的提示启发,写了一段清理删除标记的短程序,用在表单按钮下运行。在vfP 6.0运行通过。


set default  to c:\地名\data
 

IF EMPTY(表名.VALUE)  
      messagebox( "表名不能为空",0+48+256,"提示" )
  
    else
    STORE ALLTRIM(表名.VALUE) TO c表
    STORE ALLTRIM(表名.VALUE)+"1" TO c表1
   
    use &c表
    copy structure extended to &c表1
   
    sele * From C:\地名\data\&c表 WHERE !DELETE() INTO TABLE C:\地名\data\&c表1
     
    USE IN &c表
     use C:\地名\data\&c表
     zap
    append from &c表1
    delete file &c表1
    MESSAGEBOX(c表+"清理完毕",0+48+256,"提示")
  endif

[此贴子已经被作者于2020-9-4 00:06编辑过]

2020-09-03 23:58
快速回复:对VFP临时表使用PACK的方法
数据加载中...
 
   



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

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