Какой лучший способ сохранить данные в Delphi - PullRequest
4 голосов
/ 04 декабря 2008

Я работаю над программой на Delphi, которая содержит много данных, и мне интересно, какой метод лучше всего сохранить ее в файл. Сейчас мы используем записи и «файл» для его сохранения, но я думаю, что это должны быть лучшие методы. Я бы предпочел систему, которая позволяет легко перейти с системы, которую мы используем сейчас.

РЕДАКТИРОВАТЬ: приложение является своего рода приложением базы данных. Пользователь использует его для управления данными.

Ответы [ 6 ]

6 голосов
/ 04 декабря 2008

Это зависит от данных! Распространенными средствами являются базы данных (строки множества записей), XML (структурированное хранилище данных), INI-файлы (простые данные) или пользовательские форматы (графические изображения и т. Д.). Delphi отлично работает с базами данных, с набором сторонних опций, позволяющих полностью скомпилировать код, поэтому для общих данных они будут работать хорошо.

3 голосов
/ 04 декабря 2008

Есть много вариантов. Если вы уверены, что вам никогда не понадобится больше одного пользователя, я бы выбрал наборы ClientDatasets, сохраненные в XML. Дэн Мизер написал несколько статей о них, которые действительно хороши. Если вы не уверены, что в будущем вам понадобится один или несколько пользователей, я бы выбрал встроенную базу данных. Firebird - хороший вариант для этого. См. http://www.firebirdsql.org/manual/fbmetasecur-embedded.html для получения дополнительной информации. С тем же кодом вы сможете сделать многопользовательскую версию в будущем.

2 голосов
/ 05 декабря 2008

Для простого приложения, почему бы не использовать локальный TClientDataset? Это позволило бы искать, сортировать и использовать элементы управления базой данных. Если вы включите midaslib в ваше предложение использования, вы также можете развернуть приложение без каких-либо внешних DLL.

2 голосов
/ 04 декабря 2008

Если это приложение базы данных, сохранение данных в базе данных может быть логичным выбором.

Один из альтернативных подходов - использовать стример:

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 голос
/ 06 июня 2011
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 голосов
/ 04 декабря 2008

Также зависит от того, что вы хотите сделать с ним после того, как вы его сохранили ... это просто хранение «заархивированных» данных на данный момент? Или вы хотите выполнить поиск, извлекая некоторые данные в какой-то момент в будущем, затем сохраняя их снова (возможно, измененные), или вы загружаете все это, манипулируете им каким-либо образом, а затем сохраняете обратно снова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...