CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请教:如何从DBF库中真正删除记录 !!!

楼主cooer(爱好者)2000-11-08 18:49:00 在 Delphi / VCL组件开发及应用 提问

各位大师哥,逻辑删除完成了,可是却没有真正从表中删除,只是加了个标记,如何真正删除呢   ???   能给我一个完整的例子吗   ?非常感谢   !!!  
   
  问题点数:95、回复次数:17Top

1 楼tchaikov()回复于 2000-11-08 18:54:00 得分 50

好象告诉过你了。  
   
  Check(DbiPackTable(Table1.DbHandle,   Table1.Handle,   Nil,   szDBASE,   TRUE));  
   
  其中   Table1即为你的TABLE控件,其他不管,直接写上就是。      
   
   
   
  Top

2 楼tchaikov()回复于 2000-11-08 18:55:00 得分 0

对了,在文件头部的uses   后加上   BDE.Top

3 楼cooer(爱好者)回复于 2000-11-08 19:16:00 得分 0

就加这一句吗,好象不行啊,我是这样加的:  
  在头部uses   中加上   Bde;  
   
  with   table1   do  
      begin  
              locate('userid',edit1.text,[]);  
              table1.delete;  
              table1.close;  
              table1.Excluseive:=true;  
              Check(DbiPackTable(Table1.DbHandle,   Table1.Handle,   Nil,   szDBASE,   TRUE));  
              table1.open;  
      end;  
   
  出现的错误提示为:   Invalid   handle   to   the   function   !  
  请问我错在哪里了,该如何修改,请指出   !   非常感谢   !Top

4 楼SCUM(人渣)回复于 2000-11-08 23:45:00 得分 0

改为这样试试:  
   
  with   table1   do  
      begin  
              locate('userid',edit1.text,[]);  
              table1.delete;  
              table1.close;  
              table1.Excluseive:=true;  
              table1.open;  
              Check(DbiPackTable(Table1.DbHandle,   Table1.Handle,   Nil,   szDBASE,   TRUE));  
      end;Top

5 楼cooer(爱好者)回复于 2000-11-09 09:45:00 得分 0

这样改了还是不行,出现错误提示:Table   is   busy   !  
  希望能继续帮我找出原因,是否还有别的方法呢   ?  
  谢谢了   !!!Top

6 楼cooer(爱好者)回复于 2000-11-09 10:11:00 得分 0

谁能给我一个能运行的简单例子吗   ?   帮帮我吧,分如果不够我再加就是了,拜托各位了   !!!Top

7 楼cooer(爱好者)回复于 2000-11-09 13:59:00 得分 0

谁能帮帮我   ???Top

8 楼tchaikov()回复于 2000-11-09 14:18:00 得分 0

restart   windows...  
   
  再看看你上一个帖子。Top

9 楼cooer(爱好者)回复于 2000-11-09 15:35:00 得分 0

to   tchaikov:  
                        你们说的我已经全部试过了,真的不行,难道真的无法物理删除记录吗   ?Top

10 楼tchaikov()回复于 2000-11-10 01:07:00 得分 0

肯定就是这么做的,你能不能单步跟踪一下,看看是哪一步报的busy.  
   
  另外,你可以用DESKTOP手工删除若干条记录,再写个简单的PACK过程,看问题究竟在哪里。  
  注意,一定要把DESKTOP中DBF关掉,否则就BUSY了。  
   
   
  Top

11 楼cooer(爱好者)回复于 2000-11-10 10:40:00 得分 0

用单步跟踪运行下列程序段:  
  procedure   TForm4.bb1Click(Sender:   TObject);  
  begin  
              table2.open;  
            if   Application.MessageBox(  
                          '         确认删除该操作员吗?         ',  
                          '确认对话框',  
                          MB_OKCANCEL   +   MB_DEFBUTTON1)   =   IDOK   then  
                                      with   table2   do  
                                              begin  
                                                        table2.Locate('userid',es1.text,[]);  
                                                        table2.delete;  
                                                        table2.Close;  
                                                        table2.Exclusive   :=true;  
                                    ***               table2.Open;  
                                                        Check(DbiPackTable(Table2.DBHandle,   Table2.Handle,   nil,   szDBASE,   True));  
                                                        es1.Text   :='';  
                                                        es2.Text   :='';  
                                                        es1.SetFocus   ;  
                                                end;  
  end;  
   
  1、当加上带***的一句代码,出现错误提示:Table   is   busy   !  
  2、当不加带***的一句代码,出现错误提示:Invalid   handle   to   function   !  
   
  请帮我分析一下原因好吗,非常谢谢你的帮助   !!!Top

12 楼cooer(爱好者)回复于 2000-11-10 13:31:00 得分 0

能帮我分析一下原因吗   ?Top

13 楼cooer(爱好者)回复于 2000-11-11 12:58:00 得分 0

请帮我分析一下原因,谢谢   !!!Top

14 楼cooer(爱好者)回复于 2000-11-11 23:30:00 得分 0

请帮我分析一下原因,谢谢   !!!   Top

15 楼wangshen()回复于 2000-11-12 11:17:00 得分 45

你这样下去,这DELPHI还学得好吗?  
   
  应该学会自己分析原因,自己琢磨琢磨,这样水平才能提高。  
  以下面的程序为例:  
  with   table2   do                         //首先需要搞清楚这个   with   是干什么用的,知道以后  
                                                      //你才会在下面的语句中去掉所有的"table2."  
            begin  
                    table2.Locate('userid',es1.text,[]);  
                    table2.delete;  
                    table2.Close;                             //把程序在这里结束,然后到DESKTOP上去看看删除  
                                                                          //记录没有,删除后是什么状态。  
                    table2.Exclusive   :=true;  
  ***             table2.Open;                               //如果在这里显示table   is   busy,那就要分析为什么  
                                                                          //会忙,至此,下面的语句对table2还没有起作用,  
                                                                          //又回到你前面的问题去了,上次是怎么解决的,是  
                                                                          //什么原因,再回忆一下。  
   
                    Check(DbiPackTable(Table2.DBHandle,   Table2.Handle,   nil,   szDBASE,   True));                                                           //如果没有办法确定是怎么个用法,你可以只保留后  
                                                                          //面一部分,再看看这句语句是否能用。应该怎么用。  
   
                    es1.Text   :='';                           //既然前面的问题还没有解决,不妨先把这些语句注释掉。  
                    es2.Text   :='';  
                    es1.SetFocus   ;  
  end;  
   
  我不知道你现在基础如何,但如果你想提高自己的水平,不能什么问题都到这里来等别人给你一步一步的看,首先要学会自己怎么跟踪错误,怎么解决错误。  
   
  希望对你有帮助。Top

16 楼sdj(四眼)回复于 2001-03-01 10:46:00 得分 0

我有个办法如下:  
  table1.locate....  
  table1.Active:=false;  
  table1.Exclusive:=true;  
  table1.Active:=true;  
  table1.Delete;  
  DbiPackTable(Table1.DBHandle,   Table1.Handle,   nil,   szDBASE,   True));  
   
  table1.Active:=false;  
  table1.Exclusive:=false;  
  table1.Active:=true;  
   
  记住,在对象监视中table1的Active属性必须设为false在FormCreate中设为true;  
               
  Top

17 楼sdj(四眼)回复于 2001-03-01 10:46:00 得分 0

我有个办法如下:  
  table1.locate....  
  table1.Active:=false;  
  table1.Exclusive:=true;  
  table1.Active:=true;  
  table1.Delete;  
  DbiPackTable(Table1.DBHandle,   Table1.Handle,   nil,   szDBASE,   True);  
   
  table1.Active:=false;  
  table1.Exclusive:=false;  
  table1.Active:=true;  
   
  记住,在对象监视中table1的Active属性必须设为false在FormCreate中设为true;  
               
  Top

相关问题

  • DBF数据库不能物理删除记录?
  • 如何用query删除dbf数据库一条记录?
  • 数据库记录删除
  • 怎样物理删除DBF的记录??
  • 关于DBF记录的完全删除
  • 如何将dbf文件做删除标记得记录删除!
  • 用vc存取access数据库,*.DBF文件越来越大,既使删除了所有记录,也不变小。
  • 删除数据库记录问题
  • 删除文本数据库记录
  • 删除数据库中记录问题???????

关键词

  • 语句
  • active
  • 分析
  • 解决
  • check
  • dbipacktable
  • dbhandle
  • szdbase
  • 删除
  • exclusive

得分解答快速导航

  • 帖主:cooer
  • tchaikov
  • wangshen

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo