用文件代替DBF了
自行定义一个文件数据结构了,

解决方案 »

  1.   

    是啊,如果不愿意用BDE的话你可以用ADO啊.
    自己定义文件格式的话太累的,而且效率也是一个问题啊.
      

  2.   

    你如果保存的信息都是字符串,而且数据量不大,还可以靠考虑自己做文件。数据量一上来,速度就不行了,除非你是数据结构高手。定义自己的文件结构。自己做读写类,维护方便。这个呵呵,我做过,我自己的文件结构,数据量也不大。我刚学delphi做过,代码惨不忍睹。呵呵ADO很好呀,为什么不用ADO控件?
      

  3.   

    我当然要用ADO啦!只是想听听各位的意见,有没有什么注意事项!我还要大量用到索引!数据量并不会太大!保存信息可以全是字符串!也许会有一些BMP等!
      

  4.   

    如果你记录不多的话用对ini文件的方法就可以了,至于bmp文件你完全可以另外存储,如果你要一定的安全性,生成的ini文件也可以加个密什么的,也就与或一下,不麻烦!
      

  5.   

    可以试一试XML,现在有许多Delphi编的XML语法解释器。
      

  6.   

    我支持你!自己研发文件格式对于做一些小程序是非常有用的,而且可以增加自己的知识面!不要只想着用别人的东西,那样永远都只能用别人的东西的!
    实际上,我也不知道这个问题该怎么办,但我想,从以下几个方面入手可以有些线索:
    1、在文件头或文件尾要写一个文件结构表,用于记录每个字段的类型、字段宽度等,以便
    用文件流读出相应的内容,这个文件结构表也用文件流写入。
    2、有关索引,考虑写入一个与主文件名称相同,扩展名不同的索引文件中,索引文件的内容也是一个结构表之类的。下面一些代码是写入文件结构表的实现,不能称之为“程序”,但能够揭示一个文件流的操作,至于如果根据文件结构表中的信息读取相应位置的文件,也还有大量的工作要做。此外,我要指出的是数据的亢余是无法消除的,你定义了一个字段的宽度后,此后你每新增一条记录时,即使该字段是空的,没有内容,但它还是要占那么多的空间。我现在还不知道怎么能取消除数据亢余,但如果很容易消除的话,大多数压缩软件就没有生存的理由了。这些代码是刚才写的,在Win98+Delphi 5下调试成功。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,DB,
      StdCtrls;type
      TFileRec = record
        FieldName : Shortstring; //字段名
        FieldType : TFieldType; //字段类型
        Size: Longint; //字段尺寸
        Value: ShortString; //字段内容
      end;  TForm1 = class(TForm)
        ReadButton: TButton;
        WriteButton: TButton;
        procedure ReadButtonClick(Sender: TObject);
        procedure WriteButtonClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;implementation{$R *.DFM}procedure WriteFileHead(FileName: String);
    var FileRec: TFileRec;
      FS: TFileStream;
    begin
      FileRec.FieldName := 'Field1';
      FileRec.FieldType := ftString;
      FileRec.Size := 28;
      FileRec.Value := '这只是一个思路';
      FS := TFileStream.Create(FileName,fmCreate or fmOpenWrite);
      try
        FS.WriteBuffer(FileRec, SizeOf(FileRec))
      finally
        FS.Free;
      end;
    end;function ReadFileHead(FileName: String): TFileRec;
    var FileRec: TFileRec;
      FS: TFileStream;
    begin
      if not FileExists(FileName) then
      begin
        ShowMessage('文件“'+FileName+'”不存在!');
        Exit;
      end;
      FS := TFileStream.Create(FileName, fmOpenRead);
      try
        FS.ReadBuffer(FileRec, SizeOf(FileRec));
        Result := FileRec;
      finally
        FS.Free;
      end;
    end;procedure TForm1.ReadButtonClick(Sender: TObject);
    var FileRec: TFileRec;
      FType: String;
    begin
      try
        FileRec := ReadFileHead('C:\FHTest1.txt');
        case FileRec.FieldType of
          ftString:  FType := '字符型,';
          ftFloat:   FType := '浮点型,';
          ftInteger: FType := '整数型,';
          ftBlob:    FType := '大二进制,';
          //等等等……
        end;
        ShowMessage(FileRec.FieldName+','+FType+'宽度:'+IntToStr(FileRec.Size)+
          ',“'+AnsiString(FileRec.Value)+'”');
      except
      end;
    end;procedure TForm1.WriteButtonClick(Sender: TObject);
    begin
      WriteFileHead('C:\FHTest1.txt');
    end;end.
      

  7.   

    以上面这种思路来做,实际上写入BMP也是可以的,但是还要增加一些项目,用于记录BMP图片的尺寸,这样才能正确地读出来。
      

  8.   

    非常感谢Sachow!其他同志还有没有更好的意见!
     
    我想让更多的人得到我送出的分呀!
      

  9.   

    to Sachow(有助):你的思路和我的那种朦胧的想法差不多!只是我没有具体的方案!等我具体的实践之后;
    肯定给你加个高分!我正在收集意见期间:在这期间给我想办法的大侠均可得到小弟奉上的分!126不算多,但我会不断追加!
      

  10.   

    有没有用DBClientdata控件,自己构件文件格式有些麻烦,如果只是想避开BDE的话,用DBclientdata就可以了,在分发时,只需要带一个DLL就行。
      

  11.   

    其实如果真是简单应用,用BORLAND在MIDAS里的那个TClientDataSet就好了,它支持SaveToFile/LoadFromFile,方便得很。
      

  12.   

    试试跟 mybase的作者联系,请他提供思路[email protected]
      

  13.   

    可以考虑XML,现在很多数据库可以支持XML。它是基于文本的,使用很灵活。在Delphi5中可以很方便的使用MSXML(还有其他的XML解析器,但我认为MSXML的文档很好,很容易上手),只要系统中装了Ie4或5,就可以用msxml。
      

  14.   

    这倒使我比较犹豫!能不能介绍介绍XML;我是个很菜很菜的菜鸟!!
      

  15.   

       呵,你是个负有很高激情的人。。以前我也这样想过。
       要做得好要考虑很多东西的。而且还要有个很好的算法去访问那个个自己的数据库格式。   当时学Foxbase时我就有想过这个问题,如果你还有在Foxbase中用的数据库表(*.dbf)的话你用文本形式打开或许会得到些启发。  有空我还会回来答的。现在真的没时间去想这个问题了。
      

  16.   

    to yiyu(议余) 非常感谢!我很希望考虑周全,但又顾忌很多!!!
      

  17.   

    我认为,access的mdb是一个很不错的文件型数据库,功能很全面。自己再设计一个文本数据库格式,工作量很大,可能问题也多多。不妨这么办,就是自己设计个读写mdb数据库的delphi控件,这样,既保护了大量原来的数据,也做到与他人的兼容、通用。如何?
    如果觉得mdb格式太复杂,那么也可以考虑.db, .dbf等文件型数据库。
    另外,suzg建议采用xml,也是个不错的注意。
      

  18.   

    用简单的文本就采用INI吧?还可自定义一些小的软件运行过程中的临时文件(写明白)
    而最终保存的文档就用16进制保存吧!如果不是什么大项目,我想这样已经够了!