| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 780 人关注过本帖
标题:请教关于pack的使用方法
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
结帖率:88.6%
收藏
已结贴  问题点数:20 回复次数:11 
请教关于pack的使用方法
表单已经打开,表单的表示通过表单的数据环境加载的,表单的datasession属性是私有,现在要对数据环境中的表执行PACK操作,应该怎么办,我有个思路:
1、先判断有没有其他进程打开表了
2、关闭数据环境中的表
4、设置 set EXCLUSIVE on
5、独占方式在表单中打开表
6、使用pack
7、退出表
8、set EXCLUSIVE off
9、恢复表单的数据环境
不知道对不对,具体代码第1步和第9步不会,第5步也有问题,不知道如何自动找到表。
搜索更多相关主题的帖子: 如何 
2014-01-20 13:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
先問一問自己:爲什麽非要pack不可?

delete了的記錄,是可以回收利用的,不是非pack掉不可。有很多方式可以忽略被delete的記錄,那些記錄存在於表中并不礙多少事,但pack掉它們要冒大的風險和昂貴的代價,因爲那要對整個表文件做物理手術,還牽連對應的庫(.dbc)。pack一個表,要占用三倍以上的表空間,當表很龐大時,那就很可怕了。

[ 本帖最后由 TonyDeng 于 2014-1-20 14:09 编辑 ]

授人以渔,不授人以鱼。
2014-01-20 13:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.你判斷不到是否有其他進程打開了表,除非你嘗試用exclusive模式打開表遇到失敗的時候,才知道表被人打開了;
2.就算當前沒人在打開表,你也無法確保在關閉表再打開的那一段時間内沒人打開它;
3.你pack掉的記錄,說不定別人有用。

授人以渔,不授人以鱼。
2014-01-20 14:02
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
收藏
得分:0 
1、可以提高执行效率 2、另外总有一个担心,不小心会把删除的记录恢复了,会把数据搞乱,虽然通过界面操作不会出现,但DBF格式的表没有加密,PACK掉还是放心些
3、有些用于查询的原表隔一段时间要导入更新,更新一次要删掉几万条记录,累计下来就会影响执行效率
2014-01-20 14:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
對vfp數據庫來說,數千萬的記錄量并不會影響什麽效率!

使用數據庫表,是在.dbc中設置打開事件代碼加密的(祇要一嘗試打開表,該事件就觸發,在那裏寫檢測代碼),不用對表加密。再者我不明白你爲什麽關注被刪掉的記錄被窺探而不擔心現存的數據被窺探,難道被刪掉的記錄更重要?既然表文件可以被任意打開,你pack不pack都是那樣泄密的啦。

授人以渔,不授人以鱼。
2014-01-20 14:13
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:989
专家分:4946
注 册:2013-2-16
收藏
得分:5 
赞同版主观点,大数据量的表,做PACK要谨慎!!
如果在PACK的过程中...突然断电了、当机了......后果不堪设想,用代码跳过被删除的记录就好了。
2014-01-20 14:24
bccn0906
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:蜘蛛侠
威 望:2
帖 子:414
专家分:1183
注 册:2013-10-16
收藏
得分:5 
写个过程,定期按需维护清理。不要在日常操作做这些PACK动作,对大表PACK 是很耗时的,也危险。这过程可能令你的系统慢得动不起来。更不要说执行效率了.
2014-01-20 15:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其實如果你真想被人看到已刪除的數據,在delete的時候順帶把記錄用空值或亂碼抹掉就是了,用不着費那麽大的功夫去壓縮數據庫。pack數據庫的動作,應由管理員在適當時候操作,可以寫一段程序執行,但不應放在應用程序中(若一定要,也是用身份驗證才能執行的)。

pack過的數據庫,也有可能從臨時文件目錄中找回來,但刷新掉的數據,是永遠不可能重現的——這也是人家說刪除文件後最好重建一個同名文件刷掉原先數據的原因。須知很多數據恢復軟件可以做這種事。

[ 本帖最后由 TonyDeng 于 2014-1-21 13:31 编辑 ]

授人以渔,不授人以鱼。
2014-01-21 13:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
所謂pack,其實就是創建一個新表,把原先表中未刪除的數據複製到新表中,然後把舊表刪除,再把新表改名回原先的表名,并重建索引。明白了這個動作機制,就知道爲什麽這條指令需要獨占表!

授人以渔,不授人以鱼。
2014-01-21 13:36
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:5 
安全起见,用 select * from .. 有条件的生成新表,原表清空,并 append 新表。功能与 pack 一样,但是安全一点。因为有个新表做备份用。
2014-01-21 14:23
快速回复:请教关于pack的使用方法
数据加载中...
 
   



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

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