哪个是在Delphi中保存数据的最佳方法

时间:2008-12-04 10:58:46

标签: database delphi

我在Delphi中处理一个包含大量数据的程序,我想知道哪种方法最好将其保存到文件中。现在我们使用记录和“文件”来保存它,但我认为它应该是更好的方法。我希望系统能够从我们现在使用的系统中轻松迁移。

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

6 个答案:

答案 0 :(得分:6)

这取决于数据!常用方法是数据库(大量记录行),XML(结构化数据存储),ini文件(简单数据)或自定义格式(图形图像等)。 Delphi非常适合数据库,提供一系列第三方选项以允许完全编译的代码,因此对于一般数据,它们可以很好地工作。

答案 1 :(得分:3)

有很多选择。如果你确定你永远不会需要一个以上的用户,我会选择以XML格式保存的ClientDatasets。 Dan Miser写了一些非常好的文章。如果您不确定将来是否需要一个或多个用户,我会选择嵌入式数据库。 Firebird是一个不错的选择。有关详细信息,请参阅http://www.firebirdsql.org/manual/fbmetasecur-embedded.html。使用相同的代码,您将来可以制作多用户版本。

答案 2 :(得分: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;

答案 3 :(得分:2)

对于简单的应用程序,为什么不使用本地TClientDataset?它将允许搜索,排序和使用数据库控件。如果在use子句中包含midaslib,则还可以在没有任何外部dll的情况下部署应用程序。

答案 4 :(得分: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; 

这应该有效,因为它对我有用

答案 5 :(得分:0)

一旦你保存了它,还取决于你想用它做什么......这只是存储'存档'数据吗?或者你想搜索它,在将来的某个时刻检索一些数据,然后再将它保存回来(可能会改变),或者你把它全部加载,以某种方式操纵它,然后再将它保存回去?