请教:如何从DBF库中真正删除记录 !!!
各位大师哥,逻辑删除完成了,可是却没有真正从表中删除,只是加了个标记,如何真正删除呢 ??? 能给我一个完整的例子吗 ?非常感谢 !!!
问题点数: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




