哪种方法是在Delphi中保存数据的最佳方式?

4

我在Delphi程序上工作,它包含了很多数据。我想知道哪种方法最好用来保存这些数据到文件中。现在我们使用记录和“文件类型”来保存数据,但我认为应该有更好的方法。我希望采用一个易于迁移的系统,以便从我们现在使用的系统中轻松过渡。

编辑:该应用程序是一种数据库应用程序。用户使用它来管理数据。

6个回答

6

这取决于数据的类型!常用的方式包括数据库(存储大量记录的行)、XML(结构化数据存储)、ini文件(简单数据)或自定义格式(图形图像等)。Delphi非常擅长处理数据库,提供了一系列第三方选项,允许完全编译的代码。因此,对于一般数据,它们会表现得很好。


3

有很多选择。如果您确定永远只需要一个用户,我建议选择保存在XML中的ClientDatasets。Dan Miser写了一些非常好的文章介绍它们。如果您不确定未来是否需要一个或更多用户,我建议选择嵌入式数据库。Firebird是一个不错的选择。请参阅http://www.firebirdsql.org/manual/fbmetasecur-embedded.html获取更多信息。使用相同的代码,您将能够在未来制作多用户版本。


2

对于一个简单的应用,为什么不使用本地的TClientDataset?它可以进行搜索、排序和使用数据库控件。如果在您的uses子句中包括midaslib,您还可以在不使用任何外部dll的情况下部署应用程序。


2

如果是数据库应用程序,将数据存储在数据库中可能是合乎逻辑的选择。

另一种替代方法是使用流处理器:

procedure TmyThing.PutData(AFile: String);
var
  writer: TWriter;
  stream: TFileStream;
begin
  stream := TFileStream.Create(AFile, fmCreate);
  try
    writer := TWriter.Create(stream, $ff);
    try
      with writer do
      begin
        WriteSignature;         {marker to indicate a Delphi filer object file.}
        WriteListBegin;         {outer list marker}
        WriteFloat(cVersion);   {write the version for future use}
        WriteString(someProperty);
        {... etc. ...}
        WriteListEnd;           {outer list marker}
      end;
    finally
      writer.Free;
    end;
  finally
    stream.Free;
  end;
end;

1
var

 FileStream: TFileStream;


procedure TForm1.Load(Sender: TObject);

Begin

if FileExists ('Thing2.dat') then

      Begin             
      FileStream := TFileStream.Create('Thing2.dat', fmOpenRead);
      FileStream.ReadComponent( {Thing like Edit1} );
      FileStream.Free;
      End;
end;

并加载

procedure TForm1.Save(Sender: TObject);

Begin



 FileStream := TFileStream.Create('Thing2.dat', fmcreate);

 FileStream.WriteComponent(  {Thing like Edit1}   );

 FileStream.Free;



end; 

这应该可以工作,因为它对我有效


0

还要看你保存数据后想用它做什么...现在只是存储“归档”数据吗?还是你想在将来的某个时候搜索它,检索其中一些数据,然后再保存回去(可能已更改),或者你全部加载进来,以某种方式进行操作,然后再重新保存出去?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接