⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 物理删除dbf数据库记录.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>心得体会</title>
<meta name="Microsoft Theme" content="none, default">
<meta name="Microsoft Border" content="none, default">
</head>

<body>

<table border="0" cellpadding="0" cellspacing="0" width="97%" height="35">
  <tr>
    <td width="12%" bgcolor="#c5ede9" height="4"><a href="http://personal.htxx.com.cn/zhcwork"><font size="3" color="#FF0000">返回主页</font></a></td>
    <td width="78%" bgcolor="#c5ede9" height="4">
      <p align="center"><font size="6" color="#FF0000" face="楷体_GB2312">心得体会</font></td>
  </tr>
</table>
<p>以下是我在编程中的一些体会,由于主页刚改版不久,以前的一些体会慢慢再放上了,如果您有什么<br>
灵感不妨也写出来,大家相互交流,共同提高吗。</p>
<p><font color="#0000FF"><u>制作彩色SPEEDBUTTON的方法</u></font><font color="#FF0000">(2000。2.20)</font></p>
<table border="0" cellpadding="0" cellspacing="0" width="97%" height="35">
  <tr>
    <td width="78%" bgcolor="#c5ede9" height="4">
      <p align="left" style="line-height: 150%"><font color="#FF0000">S</font>peedButton由于没有color属性,如果想要彩色的化,又不想用第三方控件,可以用如下方法。<br>
      1、放置一label,设置其颜色为需要颜色,autosize属性为False,Caption为空,设置其大小为合适尺寸。<br>
      2、在label上放置一SpeedButton,设置Flat为True,大小与Label相同,即可获得彩色SpeedButton了。</td>
  </tr>
</table>
<p><u><font color="#0000FF">物理删除DBF</font></u>数据库记录<font color="#FF0000">(2000.7.3)</font></p>
<table border="0" cellpadding="0" cellspacing="0" width="97%" height="35">
  <tr>
    <td width="78%" bgcolor="#c5ede9" height="4">
      <p align="left" style="line-height: 150%">我给你程序,你结合BDE HELP用。<br> 
      在DELPHI 3 中为DBF数据库增加Undel,Pack等功能<br> 
      在用Delphi 3 开发基于Dbf 数据库时,若用Ttable元件的Delete 方法删除<br> 
      一条记录,同时CachedUpdates为True (或CachedUpdates为False,但调用了<br> 
      ApplyUpdates方法),则Delphi 在该条记录的物理位置的首部用“*”打上<br> 
      标记(正如用Foxpro或Dbase的Del命令一样)。<br> 
      在Delphi 中对各种数据库(Paradox,Dbase 等)的底层操作均是通过数据库<br> 
      引擎(BDE)进行的。对于Dbase数据库,缺省情况下,BDE将标有删除标记“<br> 
      *”的记录过滤掉,不提供给上层应用程序,因此使用Delphi中Data Access&nbsp;<br>
      页上的元件或用DataBase DeskTop均无法对这些记录进行显示和操作,因而<br> 
      无法象Foxpro  那样在必要时用Undel恢复删除或用Pack 进行彻底地物理删<br> 
      除。日积月累,这类记录越来越多,占用了大量的磁盘空间,降低了操作时<br> 
      间,降低了安全性。因此这就要求Delphi 能提供显示已被打有“*”标记的<br> 
      记录的方法(DispDeleted ),能够恢复误删除方法(Undel ),以及物理<br> 
      删除有“*”标记记录的方法(PackTable)。<br> 
      既然有“*”标记的记录是在数据库引擎BDE中被过滤掉的,那么也只有通过<br> 
      对BDE编程,使BDE 不过滤有“*”记录,从而使用Delphi中Data Access 页<br> 
      上的元件或用DataBase DeskTop能对这些记录进行显示和操作。在Borland公<br> 
      司提供的BDE API  接口数据结构中有一参数 curSOFTDELETEON,当它值为<br> 
      True时,则BDE不过滤有“*”记录,当它为False时,则过滤。而BDE缺省时<br> 
      curSOFTDELETEON为False。因此当我们需要显示和操作有“*”记录时,我们<br> 
      可以通过编程将curSOFTDELETEON设为True,当我们不需要显示和操作有“*<br> 
      ”记录时,我们可以将curSOFTDELETEON设为False,值得注意的是,由于“*<br> 
      ”不是数据库的一个“Field",因此在允许显示有“*”记录时,Delphi并不<br> 
      将“*”也也显示出来,这就让使用者难以区别该条记录是否是有“*”标记<br> 
      。同样,BDE的API接口中也有一个变量bDeleteFlag,当bDeleteFlag为True<br> 
      时,则此记录是有J“*”标记的,反之则没有。因此当需要时,我们可以对<br> 
      BDE编程,取出该变量来进行判断。关于如何对BDE进行编程,请读者参考相<br> 
      关资料,本文仅针对以上几个问题给出源程序和例子,以供读者参考。<br> 
      <br> 
      //  判断Atable 中当前记录是否已被删除, 若返回值为True 则已被删除,<br> 
      否则未被删除&nbsp;<br>
      Function GetDelFlag(Atable: Ttable):Boolean;<br> 
      var<br> 
  CP: CurProps;<br> 
  RP: RecProps;<br> 
      begin<br> 
  with Atable do begin<br> 
    UpdateCursorPos;                // 同步 BDE 和 Delphi<br> 
      <br> 
    Check(DbiGetCursorProps(Handle, CP));<br> 
    // 确认是Dbase  表!且已置软删除<br> 
   	if  CP.szTableType&lt;>szDBASE then<br> 
  	  raise EDatabaseError.Create('Not is DBASE DBF!');<br> 
		if CP.bDeletedOn = False then<br> 
  	  raise EDatabaseError.Create('Soft deletes is not on');<br> 
      <br> 
    // 取出删除标记&nbsp;<br>
    Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RP));<br> 
    GetDelFlag := RP.bDeleteFlag;<br> 
  end;<br> 
      end;<br> 
      <br> 
      //  设置软删除标记.<br> 
      //  若使SofeDelete=True 则使BDE 不过滤有“*”标记记录,否则,过滤<br> 
      procedure SetSofDelete(Table: Ttable; SoftDelete: Boolean);<br> 
      var<br> 
  rslt: DBIResult;<br> 
  Props: CURProps;<br> 
      begin<br> 
  Check(DbiGetCursorProps(Table.Handle, Props));<br> 
    // 确认是Dbase  表<br> 
    if StrIComp(Props.szTableType, szDBASE) &lt;> 0 then<br> 
       raise EDBEngineError.Create(DBIERR_NOTSUPPORTED);<br> 
    // 确认能设置软删除<br> 
    rslt := DbiValidateProp(hDBIObj(Table.Handle), curSOFTDELETEON,SoftDelete);<br> 
    if rslt = DBIERR_NONE then<br> 
    // 设置软删除<br> 
    Check(DbiSetProp(hDBIObj(Table.Handle), curSOFTDELETEON, Longint(SoftDelete)))<br> 
      <br> 
  else<br> 
    raise EDBEngineError.Create(rslt);<br> 
      end;<br> 
      <br> 
      // 允许有“*”标记记录显示<br> 
      procedure DispDeleted(Table: Ttable);<br> 
      Begin<br> 
   SetSofDelete(Table,True );<br> 
      End;<br> 
      <br> 
      // 不允许有“*”标记记录显示<br> 
      procedure UndispDeleted(Table: Ttable);<br> 
      Begin<br> 
   SetSofDelete(Table,False );<br> 
      End;<br> 
      <br> 
      //  恢复删除<br> 
      procedure Undel(dBASETbl: Ttable);<br> 
      var<br> 
  Cprops: CurProps;<br> 
      begin<br> 
  Check(DbiGetCursorProps(dBASETbl.Handle, Cprops));<br> 
    // 确认是Dbase  表,且软删除已设置为True;<br> 
    if StrIComp(Cprops.szTableType, szDBASE) &lt;> 0 then<br> 
       raise EDBEngineError.Create(DBIERR_NOTSUPPORTED);<br> 
    if Cprops.bDeletedOn = False then<br> 
       raise EDatabaseError.Create('Soft deletes is not on');<br> 
  Check(DbiUndeleteRecord(dBASETbl.Handle));<br> 
      end;<br> 
      <br> 
      <br> 
      procedure TForm1.Button1Click(Sender: Tobject);<br> 
      begin<br> 
  Table1.Active:=True;&nbsp;<br>
  DispDeleted(Table1);<br>
      end;<br>
      <br>
      procedure TForm1.Button3Click(Sender: Tobject);<br> 
      begin<br> 
  Undel(Table1);<br> 
      end;<br> 
      <br> 
      procedure TForm1.Button4Click(Sender: Tobject);<br> 
      begin<br> 
  GetDelFlag(Table1);<br> 
      end;<br> 
      <br> 
      end.</td> 
  </tr> 
</table> 
<p align="center"><br> 
<br> 
<u><font color="#FF0000"><a href="http://personal.htxx.com.cn/zhcwork">返回</a></font></u> 
 
</body> 
 
</html> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -