当前位置:主页>销售管理软件> 列表

数据库记录的彻底删除 找仓库进销存流程

记账软件版1楼: 我用的是桌面数据库,控件使用的是table,用table1.delete删除一条记录,但数据库文件中并没有真正把该记录删除,请问如何用一条语句完成彻底的删除。请给出完整的语句

2楼: ADOTable1.Post 如设备管理软件

3楼: 什么数据库

4楼: 什么数据库?Oracle?SQLServer?

5楼: 保存下啊
table1.post

6楼: 需要POST才可以

记账软件版7楼: delete只是对当前数据集进行了操作,需要Post才能把修改反应到数据库中》
table1.delete;
table1.post;

8楼: 你是用BDE連接的就要:
table1.delete;
table1.post;

如果是ADO連接的:
ADOTable1.delete;

9楼: 要保存一下 .

10楼: 别的数据库不用,但桌面的要保存一下,同意楼上的说法

11楼: 我估计你用的是 Dbase, Foxbase, Foxpro 一类的数据库,这类数据库删除记录时仅仅是给记录做一个删除标记,并没有真正删除记录,还要对数据库 Pack 才能真正删除。

12楼: 你的问题好像没有说清楚 如小商品批发零售软件

13楼: 有QUERY控件
找到记录后用PACK.

记账软件版14楼: 我实验了一下.post也不行,post之后,在Database Desktop里还是能看到序号不连续,各位大侠帮帮我.

15楼: 改用ADOtable

16楼: 需要pack一下,可以用pack作关键词在全文搜索中搜一下

17楼: 压缩数据库文件函数,把做了删除标记的记录物理删除。数据表要独占模式打开。

uses
SysUtils, Windows, Classes, DBTables, DbiTypes, DbiProcs, DbiErrs;

function PackDbfTable(DbfTable: TTable): Boolean;

implementation

function PackDbfTable(DbfTable: TTable): Boolean;
var
errResult: DBIResult;
begin
try
{ 如果不是以独占方式,操作失败 }
if (not DbfTable.Exclusive) or (not DbfTable.Active) then
begin
Result := False;
exit;
end;
{ 进行删除操作 }
errResult := DbiPackTable(DbfTable.dbHandle, DbfTable.handle, nil, nil, True);
{ 根据返回结果,返回成功与否的标志 }
Result := errResult = DBIERR_NONE;
except
Result := False;
end;
end;

18楼: 如果是用的dbase數據庫,用pack才能徹底刪除

19楼: 和保存没关系的 我也遇到过 好像没办法哦 楼主肯定是一个自增加的ID这类的数据吧


在数据库只能删除它的数据 但是这个标号只能接着后面了 不会删掉
例如 一个表 ID NAME
1 LI
2 YANG
如果删了这2个记录 然后添加一个记录结果就是这样
3 LIU
而不是
1 LIU

20楼: to nicai_wgl:
用了你的函数,好像也不行,程序一运行就出现table is busy的提示.另外我也找到dbipacktable()这个函数的出处发现bde.pas这个文件找不到,是不是我的系统安装的有问题.

记账软件版21楼: 打开Table的时候有没有加上
Table.Exclusive := True; //独占模式

22楼: 我就是因为加上这一句才出现的问题 如仓库进销存流程

23楼: 再加上.table.post;

24楼: 问题解决了,谢谢各位的参与,大富翁是一个很好的地方,希望大家在此都有收获。
这个问题要注意的是,不能有别的table打开这个表。

25楼: 删除表,新建表.

26楼: 楼主 你是如何解决的啊???