没人知道吗??求大家帮帮忙,谢谢了

解决方案 »

  1.   

    表较长,我的记录有100多项
    可以运行如果有问题[email protected]//
    unit DataFileStreamEnt;interface
    uses Classes, dialogs ,sysutils,data1;type
      TEntRec = packed record
        Enterprise_Cname: string[200];
        Enterprise_Ename: string[200];
        Enterprise_Reg_Address:string[200];
        Enterprise_Address:string[200];
        ....
        
      end;TDataFileStreamEnt=class(TFileStream)
    private
      function GetNumRecsEnt : Longint;
      function AppendRecEnt(const Rec):Longint;
      function ReadRecEnt(var Rec):Longint;protected
      function GetRecSizeEnt:Longint; virtual;
    public
      //
      CurID:string;
      //
      procedure FirstEnt;
      procedure NextRecEnt;
      procedure EntWrite;
      function EntRead:TEntRec;  property NumRecs:Longint read GetNumRecsEnt;
      
    end;implementation//
    function TDataFileStreamEnt.GetRecSizeEnt :Longint;
    begin
      Result:=Sizeof(TEntRec);
    end;//
    function TDataFileStreamEnt.GetNumRecsEnt :Longint;
    begin
      Result:=Size div GetRecSizeEnt;
    end;//
    function TDataFileStreamEnt.AppendRecEnt (Const Rec):Longint;
    begin
      Result:=Write(Rec,GetRecSizeEnt);
    end;//
    function TDataFileStreamEnt.ReadRecEnt (var Rec):Longint;
    begin
      Result:=Read(Rec,GetRecSizeEnt);
      Seek(-GetRecSizeEnt,1);
    end;//
    procedure TDataFileStreamEnt.FirstEnt;
    begin
      Seek(0,0);
    end;//
    procedure TDataFileStreamEnt.NextRecEnt;
    begin
      if ((Position+GetRecSizeEnt)Div GetRecSizeEnt)= GetNumRecsEnt then
        raise Exception.Create ('读取记录出错')
      else
        Seek(GetRecSizeEnt,1);
    end;//
    procedure TDataFileStreamEnt.EntWrite;
    Var
      EntRec:TEntRec;
    begin
      //读enterprise表记录,找到该记录
      datam1.ADOQryRead.SQL.Clear;
      datam1.ADOQryRead.Parameters.Clear;
      datam1.ADOQryRead.SQL.Add('select * from enterprise where enterprise_no = '+CurID);
      datam1.ADOQryRead.Open;
      //
      EntRec.Enterprise_Cname :=datam1.ADOQryRead.fieldbyname('Enterprise_Cname').asstring;
      EntRec.Enterprise_Ename :=datam1.ADOQryRead.fieldbyname('Enterprise_Ename').asstring;
      EntRec.Enterprise_Reg_Address :=datam1.ADOQryRead.fieldbyname('Enterprise_Reg_Address').asstring;
      EntRec.Enterprise_Address :=datam1.ADOQryRead.fieldbyname('Enterprise_Address').asstring;  
      ...
      //关闭查询
      datam1.ADOQryRead.Close;  AppendRecEnt(EntRec);end;//
    Function TDataFileStreamEnt.EntRead :TEntRec;
    var
      Rec:TEntRec;
    begin
      ReadRecEnt(Rec);
      Result:=Rec;
    end;end.