Допустим у вас имеется форма с кнопкой. Щелчок на кнопке с помощью
DbiCreateTable должен создать таблицу Paradox с автоинкрементальным
(приращиваемым) полем.
unit Autoinc;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, DBTables, DB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls,
DbiTypes, DbiErrs, DBIProcs;
const
szTblName = 'CR8PXTBL'; { Имя создаваемой таблицы. }
szTblType = szPARADOX; { Используемый тип таблицы. }{ При создании таблицы используется полное описание поля }const
fldDes: array[0..1] of FLDDesc = (
({ Поле 1 - AUTOINC }
iFldNum: 1; { Номер поля }
szName: 'AUTOINC'; { Имя поля }
iFldType: fldINT32; { Тип поля }
iSubType: fldstAUTOINC; { Подтип поля }
iUnits1: 0; { Размер поля }
iUnits2: 0; { Десятичный порядок следования ( 0 ) }
iOffset: 0; { Смещение в записи ( 0 ) }
iLen: 0; { Длина в байтах ( 0 ) }
iNullOffset: 0; { Для Null-битов ( 0 ) }
efldvVchk: fldvNOCHECKS; { Проверка корректности ( 0 ) }
efldrRights: fldrREADWRITE { Права }
),
({ Поле 2 - ALPHA }
iFldNum: 2; szName: 'ALPHA';
iFldType: fldZSTRING; iSubType: fldUNKNOWN;
iUnits1: 10; iUnits2: 0;
iOffset: 0; iLen: 0;
iNullOffset: 0; efldvVchk: fldvNOCHECKS;
efldrRights: fldrREADWRITE
));
type
TForm1 = class(TForm)
Button1: TButton;
Database1: TDatabase;
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
TblDesc: CRTblDesc;
uNumFields: Integer;
Rslt: DbiResult;
ErrorString: array[0..dbiMaxMsgLen] of Char;
begin
FillChar(TblDesc, sizeof(CRTblDesc), #0);
lStrCpy(TblDesc.szTblName, szTblName);
lStrCpy(TblDesc.szTblType, szTblType);
uNumFields := trunc(sizeof(fldDes) / sizeof(fldDes[0]));
TblDesc.iFldCount := uNumFields;
TblDesc.pfldDesc := @fldDes;
Rslt := DbiCreateTable(Database1.Handle, TRUE, TblDesc);
if Rslt <> dbiErr_None thenbegin
DbiGetErrorString(Rslt, ErrorString);
MessageDlg(StrPas(ErrorString), mtWarning, [mbOk], 0);
end;
end;
end.
Here's the translation of the content into Russian:
Цель - создать таблицу Paradox с полями, автоматически увеличивающимися при помощи функции DbiCreateTable.
Разбивка кода:
Единица Autoinc определяет форму (TForm1) с кнопкой и компонентом базы данных.
Обработчик события клика по кнопке создает структуру CRTblDesc, чтобы описать таблицу, устанавливает имя таблицы и тип, а также specifies количество полей и их описание с помощью массива fldDes.
Функция DbiCreateTable вызывается с.handle базы данных, флагом (TRUE) для указания, что таблица должна быть создана, если она не существует, и структурой TblDesc.
Если создание таблицы fails, отображается сообщение об ошибке с помощью функции MessageDlg.
Теперь давайте улучшить код:
Обработка ошибок: вместо отображения сообщения об ошибке с предупреждающим иконкой (mtWarning), рассмотрите возможность отображения более информативного сообщения или предоставления дополнительных деталей о ошибке.
Имя переменной: некоторые имена переменных не являются достаточно описательными (например, Rslt, uNumFields). Рассмотрите возможность использования более значимых имен для улучшения читаемости кода.
Организация кода: обработчик события клика по кнопке является quite длинным и выполняет несколько не связанных задач (создание таблицы, обработку ошибок). Рассмотрите возможность разбиения его на отдельные процедуры или функции для лучшей поддержки.
В обновленной версии кода процедура CreateTable извлекается из обработчика события клика по кнопке и выполняет только логику создания таблицы. Обработчик события клика по кнопке теперь вызывает CreateTable и обрабатывает ошибки более явно с помощью отдельного диалогового окна сообщения об ошибке с иконкой ошибки (mtError).
Создание таблицы Paradox с автоинкрементальным полем в Delphi использует функцию DbiCreateTable из компонента DBTables.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.