通过ADOQUERY 删除VFP表中的一条记录。
删除操作后再用VFP软件打开表发行只是对记录做了一个标记,并没有删除该记录。
怎样才能彻底删除记录啊?谢谢!下面是我的删除代码:
kcadoq.Active:=true;
kcadoq.Delete;
kcadoq.Requery();
showmessage('删除成功!');
解决方案 »
- Delphi 怎么播放 OGG?
- 客户端调用服务端的方法是报错'method ***** not supported by automation object' 自动化对象不支持该方法?怎么回事
- ehlib的GridEh表格中,怎么让其不显示0值。
- 公司要求修改一个没有源码的exe程序,怎么做
- 请问如何用代码清除dbgrideh过滤器中的内容,并且重新调取出全部数据集
- 菜鸟高分求救! Dos 管道 问题!
- delphi中#8代表什么?
- 高分请教-----做一个视频聊天的程序都要用到什么技术?
- 多层应用程序中,客户端和服务器端的联接的问题?
- 为什么QuickReport控件绑定数据库某一表后,只能显示一条记录(在线,急,请给予解答)
- excel数据导入的问题
- 求Interbase6.5数据库
后,要记得Post
kcadoq.Delete;
kcadoq.Post; 这样试试
sDeleteSql := 'Delete......';
try
FADOConnect.Execute(sDeleteSql);
except
end;这样也试下。
try
FADOConnect.Execute(sDeleteSql);
except
end;
sDeleteSql := 'zap';
try
FADOConnect.Execute(sDeleteSql);
except
end; 这样试下,
试前要备份数据啊,呵呵。
在Delphi程序中真正删除记录,需要调用BDE函数,函数名为DbiPackTable,
函数原型为:
function DbiPackTable(hDb : hDBIDb;hCursor : hDBICur;pszTableName : Char;pszDriverType : PChar; bRegenIdxs : Bool ): DBIResult;
----其中,hDb为数据库TDatabse的句柄,hCursor为数据表TTable的句柄,pszTableName为要删除记录的数据表 名称,pszDriverType为要删除记录的数据表的类型,bRegenIdxs表示是否在删除记录后自动更新索引文件.
---- 在 上 面 前 四 个 参 数 中,hDb 不 能 为NULL .hCursor、pszTableName、pszDriverType 可 以 为 NULL, 但 必 须 提 供 足 够 的 信 息 来 标 识 数 据 表 的 文 件 名 称 和 类 型, 当hCursor 不 为 空 时, pszTableName 和pszDriverType 可 以 为NULL; 当pszTableName 为 数 据 表 的 路 径 和 文 件 名 时,hCursor 和pszDriverType 可 以 为NULL .
---- 值 得 注 意 的 是, 在 删 除 记 录 时, 如 果 用Table 来 实 现, 则Table 必 须 以Exclusive=True 的 方 式 打 开 . 下 面 就 是 一 个 典 型 的 例 子 .
首先,应在uses语句加上DbiTypes,DbiProcs,DbiErrs.
{ Pack一个DBF数据表,DbfTable包含了数据表的信息 }
function PackDbfTable( DbfTable : TTable ) : boolean;
var
errResult : DBIResult;
begin
if not DbfTable.Exclusive then
{如果不是以独占方式,操作失败 }
begin
result := false;
exit;
end;
{进行删除操作 }
errResult := DbiPackTable( DbfTable.dbHandle,
DbfTable.handle, NIL, NIL, true );
{根据返回结果,返回成功与否的标志 }
if errResult = DBIERR_NONE then
{没有错误,操作成功 }
result := true
else{没有错误,操作失败 }
result := false;
end;