Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

DBGrid - сохранение конфигурации

Delphi , Компоненты и Классы , TDBGrid

DBGrid - сохранение конфигурации

Заходит програмер в свой темный подъезд и слышит, что в темноте кто-то шебуршится.
- Бї@дь надо-было сохраниться! - запоздало подумал он.

Нижеописанный код создает, сохраняет и загружает конфигурационный файл и изменяет размеры столбцов таблицы DBGRID


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, Db, DBTables, StdCtrls, IniFiles;
...

procedure TMainForm.NewIni(const NomeIni: string);
var
  F: System.Text;
  i: Byte;
begin
  System.Assign(F, NomeIni);
  System.ReWrite(F);
  System.WriteLn(F, '[Campi_Ordine]');
  for i:=1 to Table1.FieldCount do
    System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].FieldName);
  System.WriteLn(F, '');
  System.WriteLn(F, '[Campi_Size]');
  for i:=1 to Table1.FieldCount do
    System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].DisplayWidth);
  System.Close(F);
end;

procedure TMainForm.SaveIni(const FN: string);
var
  Ini: TIniFile;
  i: Integer;
  S : string;
begin
  NewIni(FN);
  Ini := TIniFile.Create(FN);
  with Ini do begin
    for i:=1 to Table1.FieldCount do
    begin
      S:= Table1.Fields[i-1].FieldName;
      WriteString('Campi_Ordine', 'Campo'+IntToStr(i),
      Table1.Fields[i-1].FieldName);
      WriteInteger('Campi_Size', 'Campo'+IntToStr(i),
      Table1.Fields[i-1].DisplayWidth);
    end;
  end;
  Ini.Free;
end;

procedure TMainForm.LoadIni(const FN: string);
var
  Ini: TIniFile;
  i: Integer;
  j: Longint;
  S: string;

  function MyReadInteger(const Section, Ident: string): Longint;
  begin
    result := Ini.ReadInteger(Section, Ident, -1);
    if result=-1 then
      raise Exception.Create('Errore nel file di configurazione.');
  end;

  function MyReadString(const Section, Ident: string): string;
  begin
    result := Ini.ReadString(Section, Ident, '');
    if result='' then
      raise Exception.Create('Errore nel file di configurazione.');
  end;

begin
  Ini := TIniFile.Create(FN);
  try
    with Ini do
    begin
      for i:=1 to Table1.FieldCount do
      begin
        S:= MyReadString('Campi_Ordine', 'Campo'+IntToStr(i));
        j:= MyReadInteger('Campi_Size', 'Campo'+IntToStr(i));
        Table1.FieldByName(S).index := i-1;
        Table1.FieldByName(S).DisplayWidth := j;
      end;
    end;
  finally
    Ini.Free;
  end;
end;

Программисты, которые работают с Delphi, знают, что создание и чтение конфигурационных файлов INI может быть сложной задачей. В этом тексте описаны три процедуры: NewIni, SaveIni и LoadIni. Они предназначены для создания, сохранения и загрузки конфигурации из файла INI.

NewIni процедура: Создает новый файл INI с двумя секциями: Campi_Ordine и Campi_Size. В первой секции записываются поля таблицы Table1, а во второй - их соответствующие ширины отображения.

SaveIni процедура: Сохраняет конфигурацию в существующий файл INI. Создает объект TIniFile, читает содержимое файла с помощью NewIni, и затем записывает поля таблицы Table1 обратно в файл с помощью WriteString и WriteInteger.

LoadIni процедура: Загружает конфигурацию из файла INI. Создает объект TIniFile, читает содержимое файла, и затем обновляет поля таблицы Table1 загруженными значениями. Если при чтении файла возникнет ошибка (например, отсутствие секций или ключей), то будет выброшено исключение.

В тексте также приведены несколько предложений по улучшению кода:

  1. Вместо использования префикса System. для встроенных функций Delphi можно использовать функции без префикса.
  2. В процедуре NewIni можно использовать цикл для записи полей и ширины отображения, а не повторять код для каждого поля.
  3. В процедуре SaveIni создается новый объект TIniFile, а затем сразу же освобождается. Возможно, лучше использовать этот объект снова или найти более эффективный способ сохранения конфигурации.
  4. В процедуре LoadIni выбрасывается исключение при ошибке чтения файла. Возможно, полезно будет предоставить дополнительную информацию о ошибке (например, имя отсутствующей секции или ключа).

В тексте также приведен обновленный код с учетом этих предложений.

procedure TMainForm.NewIni(const NomeIni: string);
var
  i: Byte;
begin
  AssignFile(F, NomeIni);
  Rewrite(F);

  WriteLn(F, '[Campi_Ordine]');
  for i := 1 to Table1.FieldCount do
    WriteLn(F, 'Campo' + IntToStr(i) + '=' + Table1.Fields[i-1].FieldName);

  WriteLn(F, '');
  WriteLn(F, '[Campi_Size]');
  for i := 1 to Table1.FieldCount do
    WriteLn(F, 'Campo' + IntToStr(i) + '=' + IntToStr(Table1.Fields[i-1].DisplayWidth));

  CloseFile(F);
end;

procedure TMainForm.SaveIni(const FN: string);
var
  Ini: TIniFile;
  i: Integer;
begin
  NewIni(FN);
  Ini := TIniFile.Create(FN);

  for i := 1 to Table1.FieldCount do
  begin
    WriteString('Campi_Ordine', 'Campo' + IntToStr(i), Table1.Fields[i-1].FieldName);
    WriteInteger('Campi_Size', 'Campo' + IntToStr(i), Table1.Fields[i-1].DisplayWidth);
  end;

  Ini.Free;
end;

procedure TMainForm.LoadIni(const FN: string);
var
  Ini: TIniFile;
  i: Integer;
  j: Longint;
  S: string;
  procedure LoadField(const Section, Ident: string; var FieldName, DisplayWidth: string);
  begin
    FieldName := ReadString(Section, Ident, '');
    if FieldName = '' then
      raise Exception.Create('Error in configuration file.');
    DisplayWidth := ReadInteger(Section, Ident, -1).ToString;
    if DisplayWidth = '-' + IntToStr(-1) then
      raise Exception.Create('Error in configuration file.');
  end;
begin
  Ini := TIniFile.Create(FN);
  try
    for i := 1 to Table1.FieldCount do
    begin
      LoadField('Campi_Ordine', 'Campo' + IntToStr(i), S, j);
      Table1.FieldByName(S).Index := i - 1;
      Table1.FieldByName(S).DisplayWidth := StrToInt(j);
    end;
  finally
    Ini.Free;
  end;
end;

Надеюсь, это поможет! Если у вас есть вопросы или вам нужна дополнительная помощь, пожалуйста, не стесняйтесь обращаться. 😊

В статье описывается создание, сохранение и загрузка конфигурационного файла для изменения размеров столбцов таблицы DBGrid.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:34:13/0.0036818981170654/0