有关数据表的两个疑问。(100分)

  • 主题发起人 主题发起人 zgp2000
  • 开始时间 开始时间
Z

zgp2000

Unregistered / Unconfirmed
GUEST, unregistred user!
一 压缩问题: 我曾使用从网上学到的PACK方法,对PARADOX数据表PACK一遍,但数据表大小无

丝毫改变。是不是该法只对DBASE数据表有效?

二 数据表文件大小问题: 每次对数据表进行添加或删除记录操作时,我都注意观察数据表文件

大小,发现只见增大而不见减小。比如数据表SW.DB,现有记录20条,文件大小

4KB,增加记录100条,文件大小25KB,删除记录100条,文件大小25KB,再增加

记录800条,文件大小3.79M(恐怖!),再删除记录800条,文件大小3.79M(当场

昏倒!)。
 
1.是删除所有有删除标记的记录而已,也许还整理索引
2、没真正删除,只有删除标记,PACK呀:-)))
 
CJ 说的差不多了, zgp2000你对Pack的理解有些问题,
Pack过程不是压缩数据库(不同于Zip), 而是对将数据表中的数据被标记为
删除的记录做物理性删除, 也就是说将表中的“被删除记录”所占据的
空间做释放。
 
delete并不是物理删除,用BDEAPI:dbiPackTable即可.
 
请看Database Desktop 关于Packing Table 的Help:

To pack a table, check Pack Table in the Restructure Table dialog box
when you restructure the table. Packing differs for Paradox and dBASE
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tables.

Paradox tables

Packing a Paradox table reclaims disk space used by deleted records.
^^^^^^^^^^^^^^^^^^^
dBASE tables

Packing a dBASE table permanently removes records that are marked for
^^^^^^^^^^^^^^^^^^^^^^^^^^^
deletion from the table.

你明白啦吗?
 
呵呵, 看来你以前没用过DBASE, 这是DBASE和PARADOX的特点(很难说好坏),
delete时只作了删除标记, 并没有真正删除(dbase还可以恢复), (paradox虽然
没有释放空间, 但已删除的记录没法恢复), pack命令可以释放已删除记录的空间.
(dbase就没法恢复了)
 
DBase和Paradox真正删除记录要调用BDE的API.
 

搞定!多谢各位! 不过数据记录只有800条左右,数据表文件大小达到3M多,是不是

太大了点?
 
是不是有备注字段? 
 
?
对CJ那么精彩的论述不满意?:-)
ok if u have used xbase
delphi xbase
=================
delete delete
pack pack
other
bde api recall

for example
xbase:
delete all
pack all
delphi:
delete from table
pack it
 
事实上数据库的删除的确没有真正删除,从DBase3的教科书上就可以很容易知道这一点,PACK就是用来处理这些没删除的东西的。
至于文件越来越大,我看参照一下WORD存文件的“快速保存”方式和磁盘碎片的生成原因,
对您理解生成文件变大的原因理解会有很大的帮助。

btw: 在控制面板中 ODBC 那一项可以帮您整理、压缩数据库文件。
 
CJ呀,你可真是冤枉我了!我前天上网就是送分给大家的,今天才发现

只将一个空的注释送给各位劳神去看,实在是抱歉!今天在发一次!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
后退
顶部