数据库类型为BDE,Paradox 数据表,请各位大虾赐教!
解决方案 »
- 如何做一个软键盘一样的窗口不影响原先的窗口焦点
- dbgrid控件列表显示问题
- 向DLL传递参数的一个问题!
- 谁知道明细表在递增编码时有那些经典代码(跪求,分不够加,我是穷人)
- 关于application的ONactivate(),Ondeactivate()
- 求做ocx的书籍
- 好像大家都用FASTreport,请问,哪里有下载正式中文版的地方?
- 请问这个程序怎么实现
- 给指定的计算机发送消息!
- cxSpreadSheet,合并第一行第4~7列的单元格,代码该怎么写?
- proc(a:array of string) 和proc(const a:array of string)有区别吗?
- 急!高分求:文件合并问题!
你试一试这个。
Query1.RevertRecord; 明天我给你答复。你给我Email也行。
如果用clientdataset就有更多的方法,savepoint保存记忆点或者用undolastchange一步步的撤消。当然也支持revertrecord
dBASE能够给每一个物理记录附上一个编号,能够实现“软删除”一个记录。并且恢复这些记录。
与dBASE不同的是,Paradox表没有物理记录编号的概念。但是每个记录都有一个唯一的序号。序号与物理编号的区别在于序号取决于当前使用的索引。而且Paradox没有软删除的概念。所以你的问题不能根本解决。或许用缓存提交的方式会好一点。
对于Delphi来说, 也不是直接支持dBASE的软删除功能而是通过BDE的API函数来实现。给你几这些函数的个例子
(1)获取当前记录的物理编号。(只是对dBASE和FoxPro有效)
function TdBASETable.GetREcNum:Longint;
var
RP: RECProps;
begin
UpdateCursorPos; {同步}
Check(dbiGetRecord(Handle, dbiNOLOCK, Nil, @RP));
Result := RP.iPhyREcNum; {返回记录的编号}
end;
(2)显示被软删除的记录。调用一个叫dbiSetProp()的BDE API函数。
procedure TdBaseTAble.SetViewDeleted(Value: Boolean);
{Value 允许用户显示还是不显示被软删除的记录}
begin
{表必须已经打开}
if Active and(FViewDeleted <> Value) then
begin
DisableConctrols; {避免闪烁}
try
Check(DbiSetProp(hDBIObj(Handle), curSOFTDELETEON, Longing(Value)));
finally
refresh;
EnableConctrols;
end;
FViewDeleted := Value;
end;
end;
(3)恢复被软删除的记录。调用BDE的DbiUndeleteRecord()函数,这个函数的定义为function DbiUndeleteRecord(hCursor: hDBICur):DBIResult stdcall;
下面是TdBaseTable的UndeleteRecord的方法:
procedure TdBAseTable.UndeleteRecord;
begin
if not IsDeleted then
raise EDataBaseError.Create('Record is not delete');
Check(DbiUndeleteREcord(Handle));
Refresh;
end;