Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Создание таблицы с автоинкрементальным полем

01.01.2007

Допустим у вас имеется форма с кнопкой. Щелчок на кнопке с помощью DbiCreateTable должен создать таблицу Paradox с автоинкрементальным (приращиваемым) полем.

unit Autoinc;
 
interface
 
uses
 
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 then
 
begin
   
DbiGetErrorString(Rslt, ErrorString);
   
MessageDlg(StrPas(ErrorString), mtWarning, [mbOk], 0);
 
end;
end;
 
end.

Взято с https://delphiworld.narod.ru