请教BDE引擎下的dbf文件记录行如何永久删除?

kyobo 2004-06-21 05:38:01
请各位大侠指点一二.
...全文
150 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyobo 2004-07-19
  • 打赏
  • 举报
回复
谢谢!
aiirii 2004-06-21
  • 打赏
  • 举报
回复
从数据表光标获取数据库句柄}

          Check(DbiGetObjFromObj(hDBIObj(FTable.Handle), objDATABASE, hDBIObj(hDb)));

          {设置表的描述结构的Name/Type/bPack属性}

           StrPCopy(TableDesc.szTblName, FTable.TableName);

           StrPCopy(TableDesc.szTblType, Props.szTableType);

           TableDesc.bPack := True;

           {关闭表并调用api}

            FTable.Close;

            Application.ProcessMessages;

            Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));

            Application.ProcessMessages;

            FTable.Open;

            end

           { 如果是 dBASE 表, 只需要调用DbiPackTable...}

          else

           if (Props.szTableType = szDBASE) then

            begin

             Application.ProcessMessages;

             Check(DbiPackTable(FTable.DBHandle, FTable.Handle, nil, szDBASE, True));

             Application.ProcessMessages;

            end

          {不是dBase和Paradox表}

          else

           raise EDatabaseError.Create('数据库必须是 Paradox 或者 dBASE 类型,才能进行物理删除操作!!');

           finally

           FTable.Active := False;

           FTable.Exclusive := False;

           FTable.Active := True;

          end;

         end;

  procedure TfrmPack.BitBtndBaseClick(Sender: TObject);

   begin

    if OpenPictureDlg.Execute then

     DBImage1.Picture.LoadFromFile(OpenPictureDlg.FileName);

    end;

  procedure TfrmPack.BitBtnParadoxClick(Sender: TObject);

   begin

    if OpenPictureDlg.Execute then

     DBImage2.Picture.LoadFromFile(OpenPictureDlg.FileName);

   end;

  procedure TfrmPack.BitBtnPackdBASEClick(Sender: TObject);

   begin

    PackTable(tbldBASE);//物理删除dDBSE库

   end;

  procedure TfrmPack.BitBtnPackParadoxClick(Sender: TObject);

   begin

    PackTable(tblParadox);//物理删除Paradox库

  end;
aiirii 2004-06-21
  • 打赏
  • 举报
回复
http://www.enet.com.cn/eschool/inforcenter/A20040320296088.html
 1. 对于dBase和Paradox库,其Pack原理是不同的:如果是Paradox 表, 必须调用 DbiDoRestructure,重建数据库结构;如果是 dBASE 表, 只需要调用DbiPackTable。

  2. 在做Pack删除时,必须以独占方式打开数据库时。具体请参考一下的例子。

   (为了节省篇幅,例子中只给出关键性的程序段)

  implementation

   uses BDE;//做PACK必须引用次单元里的函数

   {$R *.DFM}

    procedure TfrmPack.FormCreate(Sender: TObject);

    var

     DBName:String;

    begin

    DBName:=ExtractFilePath(Application.ExeName);//得到数据库的位置

     {设置Table}

      tblDBASE.DatabaseName:=DBName;

      tblParadox.DatabaseName:=DBName;

      tblDBASE.TableName:='dbsTest.dbf';

      tblParadox.TableName:='pdxTest.db';

      tblDBASE.Active:=True;

      tblParadox.Active:=True;

      end;

     {物理删除数据库记录Pack a Paradox or dBASE table}

      // The table must be opened execlusively before calling this procedure...

      procedure TFrmPack.PackTable(FTable: TTable);

      var

       Props: CURProps;

        hDb: hDBIDb;

       TableDesc: CRTblDesc;

      begin

       FTable.Active := False;

       {当数据库打开失败时,这个循环语句能够让用户重试}

       repeat

       try

        FTable.Exclusive := True;

        FTable.Active := True;

        {如果正常打开数据库,则退出循环}

        Break;

        except

        on EDatabaseError do

        if Application.MessageBox(

         '以独占方式打开数据库时,出现错误---重试否?',

         '数据库错误',

         MB_OKCANCEL + MB_DEFBUTTON1) < > IDOK then

         Exit;

        end;

        until False;

       try

        {Check()用于校正和报告DBI底层错误;DbiGetCursorProps()用于取表光标属性}

        Check(DbiGetCursorProps(FTable.Handle, Props));// 获得表的属性已得到表的类型

        {如果是Paradox 表, 必须调用 DbiDoRestructure,重建数据库结构}

         if (Props.szTableType = szPARADOX) then

          begin

           FillChar(TableDesc, sizeof(TableDesc), 0);
一套操作数据库(*.db,DBF) 的工具,功能非常的强大。 2000版功能: 包括建立数据表、删除数据表、索引、排序、打印、预览、数据转换、数据备份、修改数据表结构、输出文本、输出HTML文件、统计查询、字段求合、生成决策图表等功能。 2002版新增功能: 1、多窗口(MDI)与单窗口两种模式 2、提供最近使用路径 3、提供BDE版本检查 4、设置进入口令 5、给数据表填加口令 5、设置启动目录 6、复制记录、复制当前字段名称、复制字段名列表、复制选择区域数据 7、改进SQL执功能 8、改进数据转换功能 9、记录查找功能 10、自动生成创建表SQL语句 11、设置数据移动位数 12、改进了建立索引功能,现可以建立主重索引(多个字段) 13、自动显示当前字段类型/宽度/字段总数/索引字段 Xp版新增功能: 1、加入了功能强大的报表设计、报表打印功能。可自己根据数据库设计报表,还可以把设计好的报表另存为报表文件,也可输出如Html格式等。 2、加入了BDE数据库驱动程序,解决了以前下载后没有驱动程序不能正常运的问题。 Xp 2002.11 版新增功能:(右击菜单) 1、加入对数据的剪切、复制、粘贴、删除功能。可直接把一张表内的数据复制到另一张表内,也可以把一张表的某字段的数据复制到另一张表的某字段。功能非常实用。(选择区域内数据) 2、加入输出Excel、Html、rtf、csv、txt文件格式。(选择区域内数据)

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧