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

Как экспортировать таблицу базы данных в ASCII-файл

Delphi , Базы данных , ASCII и CSV

Как экспортировать таблицу базы данных в ASCII-файл


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    MyTable: TTable;
    DataSource1: TDataSource;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ExportToASCII;
end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.ExportToASCII;
const
  FASCIISeparator:string=' | ';
var
  I: Integer;
  Dlg: TSaveDialog;
  ASCIIFile: TextFile;
  Res, FASCIIFieldNames: Boolean;
  FASCIIFileName:string;
begin
  with MyTable do
  begin
    if Active then
      if (FieldCount > 0) and (RecordCount > 0) then
      begin
        Dlg := TSaveDialog.Create(Application);
        Dlg.FileName := FASCIIFileName;
        Dlg.Filter := 'ASCII-Fiels (*.asc)|*.asc';
        Dlg.Options := Dlg.Options+[ofPathMustExist,
        ofOverwritePrompt, ofHideReadOnly];
        Dlg.Title := 'Экспоритровать данные в ASCII-файл';
        try
          Res := Dlg.Execute;
          if Res then
            FASCIIFileName := Dlg.FileName;
        finally
          Dlg.Free;
        end;
        if Res then
        begin
          AssignFile(ASCIIFile, FASCIIFileName);
          Rewrite(ASCIIFile); First;
          if FASCIIFieldNames then
          begin
            for I := 0 to FieldCount-1 do
            begin
              write(ASCIIFile, Fields[I].FieldName);
              if I <> FieldCount-1 then
                write(ASCIIFile, FASCIISeparator);
            end;
            write(ASCIIFile, #13#10);
          end;
          while not EOF do
          begin
            for I := 0 to FieldCount-1 do
            begin
              write(ASCIIFile, Fields[I].Text);
              if I <> FieldCount-1 then
                write(ASCIIFile, FASCIISeparator);
            end;
            Next;
            if not EOF then
              write(ASCIIFile, #13#10);
          end;
          CloseFile(ASCIIFile);
          if IOResult <> 0 then
            MessageDlg('Ошибка при создании или переписывании '+
            'в ASCII-файл', mtError, [mbOK], 0);
        end;
      end
      else
        MessageDlg('Нет данных для экспортирования.',
        mtInformation, [mbOK], 0)
    else
      MessageDlg('Таблица должна быть открытой, чтобы данные '+
      'можно было экспортировать в ASCII-формат.', mtError, [mbOK], 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ExportToASCII;
end;

end.

Перевод контента на русский язык:

Это приложение Delphi, экспортирующее данные из таблицы базы данных в файл ASCII. Вот разбивка кода:

Главная форма имеет контроль DBGrid, отображающий данные из таблицы MyTable. Там также есть кнопка и процедура ExportToASCII, вызываемая при клике по кнопке.

Процедура ExportToASCII выполняет следующие действия:

  1. Проверяет, активна ли таблица MyTable и имеет ли она хотя бы один рекорд. Если нет, отображает сообщение об ошибке.
  2. Создает объект TSaveDialog, чтобы запросить у пользователя имя файла и расположение.
  3. Устанавливает свойства диалога сохранения:
    • FileName: устанавливает дефолтное имя файла для сохранения.
    • Filter: указывает, что только файлы ASCII с расширением .asc должны быть отображены.
    • Options: включает опцию "Путь должен существовать", чтобы пользователь выбрал валидный каталог. Также включает опции "Вопрос о перезаписи" и "Скрытие только для чтения".
  4. Отображает диалог сохранения с помощью метода Execute. Если пользователь отменяет или закрывает диалог без выбора файла, процедура заканчивается.
  5. Если файл был выбран, присваивает имя файла переменной FASCIIFileName и освобождает объект TSaveDialog.
  6. Открывает присвоенный файл в режиме записи с помощью процедур AssignFile и Rewrite.
  7. Записывает имена полей таблицы в файл, разделенные константой FASCIISeparator (|). Если это первый рекорд (то есть заголовок), добавляет символ новой строки (#13#10) в конце.
  8. Перебирает каждый рекорд в таблице с помощью цикла while:
    • Записывает каждое значение поля в файл, разделенное константой FASCIISeparator.
    • Добавляет символ новой строки (#13#10) после каждого рекорда, за исключением последнего.
  9. Закрывает файл с помощью процедуры CloseFile и проверяет, возникла ли ошибка ввода-вывода. Если да, отображает сообщение об ошибке.

Процедура Button1Click просто вызывает процедуру ExportToASCII, когда кнопка кликается.

Некоторые предложения по улучшению кода:

  • Вместо жесткого кодирования имени файла и расширения в диалоге сохраненияconsider using a more dynamic approach, such as generating a unique file name based on the current date and time.
  • Может быть полезно добавить обработку ошибок для случаев, когда пользователь выбирает недопустимый каталог или имя файла.
  • Рассмотрите возможность добавления дополнительных опций форматирования, таких как указание используемого кодировки ASCII (например, UTF-8).
  • Если планируете использовать эту процедуру с большими данными, рассмотрите возможность использования буфферного потока вывода вместо записи каждого рекорда индивидуально.

В целом, код appears to be functional and well-structured. With some minor tweaks, it should become even more robust and user-friendly.

Статья описывает процесс экспорта таблицы базы данных в ASCII-файл с помощью программного кода на языке Pascal, созданного в среде Delphi.


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

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




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


:: Главная :: ASCII и CSV ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-14 22:26:24/0.0044169425964355/0