DBF数据库不能物理删除记录?

yinfudan 2000-09-05 06:50:00
大家有没有注意,使用DBF(不是Paradox)数据库时,
先增加若干条纪录,保存,记下DBF文件的大小。
然后再删除其中若干条纪录,保存,这个DBF文件的
大小并没有减小。如果用记事本打开这个DBF文件,
你会发现已删除的纪录数据仍在这个DBF文件中。
这样一来,DBF文件的大小不是要越来越大了吗?
怎样解决这个问题?
...全文
152 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tchaikov 2000-09-05
  • 打赏
  • 举报
回复
在记录删除后,用程序删除,否则QuickReport会打印出被删除的记录的。

uses BDE;

Check(DbiPackTable(Table1.DbHandle, Table1.Handle, Nil, szDBASE, TRUE));

guoyuzhang 2000-09-05
  • 打赏
  • 举报
回复
想物理删除,也简单,Delphi提供了一个函数:dbiPackTable

Nicrosoft 2000-09-05
  • 打赏
  • 举报
回复
物理删除的话,你可以用foxpro打开该dbf文件,然后执行pack就可以了。
基于java实现的数据库管理系统 ⼀、需求分析说明 通过对数据库系统原理的学习,掌握数据库管理系统的运⾏原理,尝试在给定的DBF⽂件操作框架的物理储存基础上通过java建⽴⼀个数据 库管理系统,以更好的温习学习的知识。 基本功能如下: 实现创建表,并把约束条件存储到建⽴好的数据字典中 为表添加删除列操作和删除表操作 实现对表数据的插⼊操作,并实现插⼊前约束检测 实现对表数据删除操作 实现对表数据的修改操作,修改前对修改数据进⾏约束检测 实现对表数据的查询操作,完成多表查询,单条件多条件查询,单字段排序与多字段排序 实现对输⼊过的SQL语句进⾏系统⽇志记录,并添加时间 界⾯友好,易与操作,通过创建⼀个简单的窗⼝实现对SQL语句的输⼊和对运⾏结果的显⽰ 该系统存在于com.silence.mysql包中,系统⽂件夹⽬录下的data⽂件夹是数据库DBF⽂件的存储⽬录,logs⽂件夹是系统⽇志⽂件⽬录。 该模块是数据库系统的主模块,在包主⽬录下,包括三个类DBMS.java、DBMSForm.java、MyException: DBMS.java:系统的运⾏中⼼,通过输⼊的SQL语句开头将SQL语句传⼊到相应的⼦模块,并对SQL语句进⾏标准化预处理;通过对输⼊ 的正确的SQL语句实现对系统⽇志的记录 DBMSForm.java:系统的显⽰窗⼝,通过单例模式创建⼀个显⽰窗⼝,实现对SQl语句的输⼊操作和对运⾏结果的反馈显⽰,提供接⼝实现 让其他模块运⾏时对UI界⾯的即时刷新,该类中的main函数是系统的运⾏⼊⼝ MyException.java:⾃定义异常,通过接收⼦模块抛出的运⾏时异常,实现将异常反馈输出到UI界⾯中供⽤户参考 该模块在包名下的dbf包中,通过javadbf4.1.jar包提供的DBF⽂件操作函数库,实现对数据库DBF⽂件的读写操作,该模块包括 DBFContent.java和DBFUtils.java两个类。 DBFContent.java:这个是⼀个JavaBean,通过将读取到的DBF中数据存储到这个JavaBean中,实现对数据库中数据的操作 DBFUtils.java:DBF⽂件操作⼯具类,通过对javadbf4.1.jar中函数的调⽤,实现对DBF⽂件的读写操作,提供创建表,插⼊表和查询表 的操作函数 该模块在包名下的where包中,通过对SQL字符串中提取的where块的解析,实现将where语句条件翻译成OR条件组,OR条件组中包括 AND条件组,条件组类中提供对⼀条记录的条件匹配操作函数,进⽽实现对⼀条记录的where条件匹配操作,供数据库⼦模块使⽤。该模块 包括两个类:OrOfWhere.java和AndOfWhere.java: OrOfWhere.java:每个实例代表由OR连接的条件语句块的⼀边,OR语句块中可能包含多个And语句 AndOfWhere.java:每个实例代表⼀个AND连接的条件语句块的⼀边,AND语句块实现了Between…and…、=、<>、<、<=、>、>=条件 匹配 该模块在包名下的module包中,其中包括Create.java、Alter.java、Drop.java、Insert.java、Delete.java、Update.java、Select.java 七个功能,每个模块的构造函数和init()函数执⾏对SQL语句的解析和信息提取,合成可视化的执⾏类,模块中的excuteSQL()函数是该模 块的执⾏函数,执⾏结果返回到DBMSForm中进⾏UI刷新,信息反馈。 通过对Create table Student(列名 数据类型 约束条件 ………);语句的截取得到表名,将"("和")"中间的字符串以逗号分开得到列 字符串,再以空格分解得到列名,类型和约束条件。 通过对DBFUtils.createDBF()函数的调⽤实现表的创建操作,将约束条件作为记录添加到data⽬录下的"constraint.dbf"中实现对约束 条件的数据字典存储,操作过程中,primary key,unique,not null模仿Linux中的权限数的⽅式,primary key为1,unique为2,not null为4,来实现⼀个整数记录三个约束条件的⽬的。 通过对SQL字符串拆分解析,提取表名、列名和"ADD"、"DROP",将对应数据表中的数据读取到内存中,并根据列名对 DBFContent中的字段数组进⾏增加和删除,再将执⾏后的DBFContent回写⼊DBF⽂件中,实现添加删除列操作。 由于每个数据库表以⼀个⽂件来存储,⽂件名即是表名,删除表操作实际上是提取SQL字符串中的表名,再到data⽂件夹下删除对应的⽂ 件。 根据空格拆分SQL字符串,提取表名和列属性的键值对,通

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧