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

Импорт CSV ASCII

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

Импорт CSV ASCII

Автор: Dave


unit Cdbascii;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, DbiErrs, DbiTypes, DbiProcs, DB, DBTables;

type
  TAsciiDelimTable = class(TTable)
  private
    { Private declarations }
    fQuote: Char;
    fDelim: Char;
  protected
    { Protected declarations }
    function CreateHandle: HDBICur; override;
    procedure SetQuote(newValue: Char);
    procedure SetDelim(newValue: Char);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Эти свойства не должны больше публиковаться }
    property IndexFieldNames;
    property IndexName;
    property MasterFields;
    property MasterSource;
    property UpdateMode;
  published
    { Published declarations }
    property Quote: Char read fQuote write setQuote default '"';
    property Delim: Char read fDelim write setDelim default ',';
  end;

procedure Register;

implementation

uses DBConsts;

procedure Register;
begin
  RegisterComponents('Data Access', [TAsciiDelimTable]);
end;

constructor TAsciiDelimTable.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Exclusive := True;
  TableType := ttASCII;
  fQuote := '"';
  fDelim := ',';
end;

destructor TAsciiDelimTable.Destroy;
begin
  inherited Destroy;
end;

{ Рабочий код }

function CheckOpen(Status: DBIResult): Boolean;
begin
  case Status of
    DBIERR_NONE:
      Result := True;
    DBIERR_NOTSUFFTABLERIGHTS:
      begin
        if not Session.GetPassword then
          DbiError(Status);
        Result := False;
      end;
  else
    DbiError(Status);
  end;
end;

function TAsciiDelimTable.CreateHandle: HDBICur;
const
  OpenModes: array[Boolean] of DbiOpenMode = (dbiReadWrite, dbiReadOnly);
  ShareModes: array[Boolean] of DbiShareMode = (dbiOpenShared, dbiOpenExcl);
var
  STableName: array[0..SizeOf(TFileName) - 1] of Char;
  SDriverType: array[0..12] of Char;
begin
  if TableName = '' then
    DBError(SNoTableName);
  AnsiToNative(DBLocale, TableName, STableName, SizeOf(STableName) - 1);
  StrPCopy(SDriverType, 'ASCIIDRV-' + Quote + '-' + Delim);
  Result := nil;
  while not CheckOpen(DbiOpenTable(DBHandle, STableName, SDriverType,
    nil, nil, 0, OpenModes[ReadOnly], ShareModes[Exclusive],
    xltField, False, nil, Result)) do {Повтор}
    ;
end;

procedure TAsciiDelimTable.SetQuote(newValue: Char);
begin
  if Active then
    { DBError(SInvalidBatchMove); };
    fQuote := newValue;
end;

procedure TAsciiDelimTable.SetDelim(newValue: Char);
begin
  if Active then
    { DBError(SInvalidBatchMove); };
    fDelim := newValue;
end;

end.

Программный файл Delphi Pascal для пользовательского компонента базы данных TAsciiDelimTable, который позволяет читать и записывать данные из текстовых файлов, разделенных ASCII-символами. Вот обзор кода:

Интерфейс Секция интерфейса объявляет класс TAsciiDelimTable, который наследуется от TTable. В ней также определены несколько процедур и функций:

  • CreateHandle: создает новый handle для базы данных
  • SetQuote и SetDelim: устанавливают символы цитаты и разделителей для таблицы
  • CheckOpen: проверяет, открыта ли база данных, и возвращает булевое значение

Имплементация Секция имплементации содержит код для процедур и функций, объявленных в интерфейсе:

  • RegisterComponents: регистрирует компонент TAsciiDelimTable в палетке Delphi
  • Create и Destroy: конструктор и деструктор методы класса TAsciiDelimTable
  • CheckOpen: проверяет, открыта ли база данных, и возвращает булевое значение
  • SetQuote и SetDelim: устанавливают символы цитаты и разделителей для таблицы

Конструктор Метод Create инициализирует свойства компонента, включая установку режима эксклюзивного доступа и типа таблицы в ASCII.

Деструктор Метод Destroy вызывает метод деструктора, наследуемый от класса TTable, для освобождения системных ресурсов, используемых компонентом.

Работающий код Функция CheckOpen проверяет, открыта ли база данных, и возвращает булевое значение. Она также записывает сообщение об ошибке с помощью процедуры DbiError, если база данных не открыта.

Функция CreateHandle создает новый handle для базы данных с помощью функции DbiOpenTable. Она принимает несколько параметров, включая имя таблицы, тип драйвера и режим. Функция возвращает handle для базы данных или nil, если произошла ошибка.

SetQuote и SetDelim Процедуры устанавливают символ цитаты и разделителя для таблицы. Если компонент активен (то есть подключен к базе данных), они записывают сообщение об ошибке с помощью процедуры DBError.

В целом, этот код предоставляет пользовательский компонент базы данных, который позволяет читать и записывать данные из текстовых файлов, разделенных ASCII-символами. Он включает в себя функциональность для создания и управления соединениями с базой данных, установки символов цитаты и разделителя, а также проверки, открыта ли база данных.

Импорт CSV-файла в Delphi с помощью компонента TAsciiDelimTable.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:13:53/0.0056321620941162/1