在以前DOS版本下用过,比较繁。
修改:先寻找到该记录(不惜一切手段),用SEEK定位该记录的位置(可能要用到filepos),
      再写到文件中(用WRITE)。
      当然,文件最后用记录型的文件file of TMyRecord。
删除:可以借鉴Foxpro2.5 for Dos的数据表中伪删除的方法,在记录中做个删除记号,
      真正删除时可以再物理删除这些记录,当然真正删除也是没有办法,除了用循环
      复制有用的记录外。

解决方案 »

  1.   

    在以前DOS版本下用过,比较繁。
    修改:先寻找到该记录(不惜一切手段),用SEEK定位该记录的位置(可能要用到filepos),
          再写到文件中(用WRITE)。
          当然,文件最后用记录型的文件file of TMyRecord。
    删除:可以借鉴Foxpro2.5 for Dos的数据表中伪删除的方法,在记录中做个删除记号,
          真正删除时可以再物理删除这些记录,当然真正删除也是没有办法,除了用循环
          复制有用的记录外。
      

  2.   

    你可以试试DBF,仅一个pas就可以,不需库支持,就像“追捕”一样,并且还可以用其他数据库程序(excel,access等)打开,叫DBF.pas,找不到的话给我发信:[email protected]
      

  3.   

    唉,为什么我们中国的程序员总是喜欢重复劳动?老兄,你应该去用汇编写程序,保证速度最快,尺寸最小。
    Windows也不要了,那多大啊!那多慢啊!
    Linux也不能要,你应该直接在裸机上作。
      

  4.   

    谁有源代码,EMAIL TO:[email protected]
      

  5.   

    1、有许多不需要BDE直接读写DBF的控件,如DBISAM,发布时就不需要那几兆大小的BDE了2、可以用三层结构的公文包模式
      

  6.   

    MSHawk(憨憨)你好,能发给我一份吗,谢谢了。[email protected]
      

  7.   

    同意BCB,效率到底是比大小重要!
    另外请问问题是注意标题,别人总不能用“小要求”为关键字来搜索你的帖子吧?!
      

  8.   

    你可以到http://www.21jx.com/~tinydb/gb/下在一个TinyDB.以下是其网页上的介绍:TinyDB 是什么?TinyDB是提供给Delphi和BCB程序员的一组Delphi组件,目前包含 TTinyTable 和 TTinyDB。 ·完全兼容Delphi和BCB中所有的Data Controls 
    ·无须BDE的支持,无须附带任何DLL或OCX,开发绿色软件的最佳选择 
    ·支持对BLOB型字段数据的压缩,并提供多种不同压缩方案 
    ·优良的加密性能,预置三种先进的加密算法对数据库进行加密 
    ·提供数据处理扩展接口,可挂接任意压缩和加密或者自定义算法 
    ·加密和压缩均对用户透明,存取数据库时自动进行 
    ·单一文件型数据库,无论数据库多复杂,只有一个文件 
    ·完全支持基本的数据库结构定义 
    ·接口和Delphi(BCB)中的数据库相关组件保持一致,易于使用 
    ·提供配套工具 TinyDB Desktop 以及详细开发帮助文档和例程  TinyDB 能做什么?  当我们用Delphi或BCB做一个软件的时候,如果要将大量数据保存到硬盘上,通常采用的方法无外乎两种:第一种是使用Borland Database Engine(BDE);第二种是自己制定一个文件格式,用读写文件的方法把数据保存到文件中。
      对于第一种方法,没什么可说的,这大概是最常用也是最权威的方法。但它有个缺陷:必须附带并安装BDE的支持包。这对于开发一个力求精致小巧、绿色实用的软件来说,似乎并不是最好的方案。
      而第二种方法,虽然无须BDE的支持,但文件格式的拟定、维护往往让人累不堪言。当软件的功能增加,文件格式需要做相应调整的时候,为了保持兼容性而付出的代价往往是相当巨大的。而且稍有不慎,便会给用户数据带来损失。
      TinyDB所要做的事情,便是在不需要BDE支持的前提下,给软件提供一个稳定的数据库系统,把逻辑格式和物理格式分开,并提供高效的压缩和加密功能,让软件开发者能方便而且快速地建立绿色、实用、稳定、安全的数据库程序。  关于TinyDB软件名称:TinyDB
    目前版本:2.0
    软件性质:免费软件
    开发平台:Windows9x/NT/2000
    语言支持:Delphi, C++Builder 5.0 或更高版本
      

  9.   

    老兄,我这儿有个东西可能能满足你的要求。unit SingleLinkList;//单链表单元文件interfacetype
      int = integer;  TSDLinkListRec = class//单链表数据类。
      public
        Next: TSDLinkListRec;
        constructor Create;
      end;  TSDLinkListMGR = class//单链表管理类。
      private
        FCount: integer;
      public
        Head: TSDLinkListRec;
        constructor Create;
        destructor  Destroy;override;
        function  IndexOf(Index: integer): TSDLinkListRec;
        function  GetIndex(SL: TSDLinkListRec): int;
        procedure Clear;virtual;
        procedure Append(SL: TSDLinkListRec);virtual;
        procedure Insert(Index, SL: TSDLinkListRec);virtual;
        procedure Delete(SL: TSDLinkListRec);virtual;
        procedure MovePrev(SL: TSDLinkListRec);
        procedure MoveNext(SL: TSDLinkListRec);
        property  Count: int read FCount;
      end;implementationconstructor TSDLinkListRec.Create;
    begin
      inherited;
      Next := nil;
    end;constructor TSDLinkListMGR.Create;
    begin
      inherited;
      Clear;
    end;destructor  TSDLinkListMGR.Destroy;
    begin
      Clear;
      inherited;
    end;function  TSDLinkListMGR.IndexOf(Index: integer): TSDLinkListRec;
    var
      T: TSDLinkListRec;
      i: integer;
    begin
      i := 1;
      Result := nil;
      T := Head;
      while T <> nil do
      begin
        if i = Index then
        begin
          Result := T;
          Break;
        end;
        T := T.Next;
        Inc(i);
      end;
    end;function  TSDLinkListMGR.GetIndex(SL: TSDLinkListRec): int;
    var
      P: TSDLinkListRec;
    begin
      Result := 0;
      P := Head;
      while P <> nil do
      begin
        Inc(Result);
        if P = SL then
          Exit;
        P := P.Next;
      end;
      Result := 0;
    end;procedure TSDLinkListMGR.Clear;
    var
      T: TSDLinkListRec;
    begin
      T := Head;
      while T <> nil do
      begin
        Head := T.Next;
        T.Destroy;
        T := Head;
      end;
      Head := nil;
      FCount := 0;  
    end; procedure TSDLinkListMGR.Append(SL: TSDLinkListRec);
    var
      T: TSDLinkListRec;
      C: integer;
    begin
      T := SL;
      C := 0;
      while T <> nil do
      begin
        inc(C);
        T := T.Next;            
      end;
      if C = 0 then
        Exit;
      if Head = nil then
        Head := SL
      else
      begin
        T := Head;
        while T.Next <> nil do
          T := T.Next;
        T.Next := SL;
      end;
      inc(FCount, C);
    end;procedure TSDLinkListMGR.Insert(Index, SL: TSDLinkListRec);
    var
      T, T1, T2: TSDLinkListRec;
      C: integer;
    begin
      C := 0;
      T := SL;
      while T <> nil do
      begin
        inc(C);
        T := T.Next;
      end;
      if C = 0 then
        Exit;
      if Head = nil then
        Head := SL
      else
      begin
        T := Head;
        while T <> nil do
        begin
          if T = Index then
          begin
            T1 := T;
            T.Next := SL;
            T2 := SL;
            while T2.Next <> nil do
              T2 := T2.Next;
            T2.Next := T1;
            Break;
          end;
          T := T.Next;
        end;
      end;
      inc(FCount, C);
    end;procedure TSDLinkListMGR.Delete(SL: TSDLinkListRec);
    var
      T: TSDLinkListRec;
    begin
      if SL = nil then
        Exit;
      if Head = SL then
      begin
        Head := SL.Next;
        SL.Destroy;
      end
      else
      begin
        T := Head;
        while T <> nil do
        begin
          if T.Next = SL then
          begin
            T.Next := SL.Next;
            SL.Destroy;
            Break;
          end;
          T := T.Next;
        end;
      end;
      dec(FCount);
    end;procedure TSDLinkListMGR.MovePrev(SL: TSDLinkListRec);
    var
      P, C: TSDLinkListRec;
    begin
      if (SL = nil) or (SL = Head) then
        Exit;
      if Head.Next = SL then
      begin
        C := SL.Next;
        SL.Next := Head;
        Head.Next := C;
        Head := SL;
      end;
      P := Head;
      C := P.Next;
      while (C.Next <> SL) and (C.Next <> nil) do
      begin
        P := C;
        C := C.Next;
      end;
      if C.Next = nil then
        Exit;
      P.Next := SL;
      C.Next := SL.Next;
      SL.Next := C;
    end;procedure TSDLinkListMGR.MoveNext(SL: TSDLinkListRec);
    var
      P, C: TSDLinkListRec;
    begin
      if SL = nil then
        Exit;
      if Head = nil then
        Exit;
      P := Head;
      C := P.Next;
      while C <> SL do
      begin
        P := C;
        C := C.Next;
      end;
      if C.Next = nil then
        Exit;
      C := SL.Next;
      P.Next := C;
      SL.Next := C.Next;
      C.Next := SL;
    end;end.以上是一个单链表的完整实现。包括两个类:之一是单链表中的存储数据的类。之二是对此单链表进行管理的类。在管理类中实现了一下操作:
        1、APPEND操作:向链表中添加节点。
        2、INSERT操作:向链表中插入节点。(插入的节点在INDEX节点后面。)
        (注意:以上操作支持多节点。)
        3、DELETE操作:删除链表中的一个节点。
        4、MOVEPREV操作:将一个节点移动到其前一个节点前。
        5、MOVENEXT操作:将一个节点移动到其后一个节点后。
        6、INDEX操作:通过索引方式查找节点。对此两个类的使用方法如下:  TUserRec = class(TSDLinkListRec)
      private
        FStatus: TUserStatus;//当前用户状态。
        FUserID: Word;//用户ID。
        FSpeakHandle: THandle;
        procedure SetUserStatus(Value: TUserStatus);
        procedure GeneralUserID;//产生用户ID。
        procedure GeneralComEnCode;//产生用户加密密码。
      public
        UserName: TShortString;//用户名称。
        FullName: TShortString;//用户全名。
        PassWord: TShortString;//用户密码。
        UserLevel: Word;//用户等级。数值越低,则权限越低。数值越高,则权限越高。
        LoginSource: TLoginSource;//登录源。
        LoginComputerUNC: string;//登录源计算机的UNC名。(统一命名规则。) 
        LoginTime, LogOffTime, ElapsedTime: string[16];//登录时间、取消登录时间以及登录持续时间。
        ListenComCount, SpeakComCount: Word;//对话计数器。
        ComEnCode: array [0..LenCode - 1] of Byte;//用户加密密码。
        TimeOut, TimeNoLink: int;//客户未连接时间。当此时间减小到零时,将断开客户连接。以秒为单位。
        property Status: TUserStatus read FStatus write SetUserStatus;
        property UserID: Word read FUserID;
        property SpeakHandle: THandle read FSpeakHandle write FSpeakHandle;
        constructor Create;
        destructor  Destroy;override;
        procedure ReadFromFile(var F: Text);
        procedure WriteToFile(var F: Text);
      end;  TUserMGR = class(TSDLinkListMGR)
        DefaultUser: TUserRec;
        Modifyed: Bool;
        function  FindUserByName(UserName, PassWord: TShortString): TUserRec;
        function  FindUserByDoMain(DoMain: string): TUserRec;
        function  FindUserByLoginSource(S: string): TUserRec;
        function  FindUserByID(ID: DWord): TUserRec;
        procedure ReadFromFile(FileName: string);
        procedure WriteToFile(FileName: string);
        constructor Create;
        destructor  Destroy;override;
      end;以上的TUserRec类是关于用户的数据类,而TUserMGR类是对此用户链表的管理类。
        在加入用户时,可以这样做:
    var
      User: TUserRec;
    begin
      User := TUserRec.Create;
      User.UserName := '*****';
      User.FullName := '*****';
      ......
      Users.Append(User);
    end;
      
        在删除用户时,可以这样做:
    var
      User: TUserRec;
    begin
      User := TUserRec(Users.IndexOf(*));
      Users.Delete(User);
    end;    在遍历用户时,可以这样做:
    var
      User: TUserRec;
    begin
      User := TUserRec(Users.Head);
      while User <> nil do
      begin
        ......
        User := TUserRec(User.Next);
      end;
    end;