Example: TDbf (creating table and indexes, selecting of index)
From Lazarus wiki
Jump to navigationJump to searchThe printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This example was taken from the post at the forum:
http://forum.lazarus.freepascal.org/index.php/topic,31169.msg199356.html#msg199356
You can copy text to files:
- Code: mainaddindex.pas
- Form: mainaddindex.lfm
and test it.
Code
unit MainAddIndex;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, db, dbf, Forms, Controls, Graphics, Dialogs,
DBGrids, DbCtrls, StdCtrls, LazFileUtils;
const
CountriesFilename = 'countries.dbf';
type
{ TForm1 }
TForm1 = class(TForm)
BSortByCountry: TButton;
BSortByCapital: TButton;
BSortByID: TButton;
dbfSource: TDataSource;
grid: TDBGrid;
Navigator: TDBNavigator;
procedure BSortByCapitalClick(Sender: TObject);
procedure BSortByCountryClick(Sender: TObject);
procedure BSortByIDClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
CountriesDbf: TDbf;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
CountriesDbf:=TDbf.Create(Self);
CountriesDbf.TableName:=CountriesFilename;
if not FileExistsUTF8(CountriesFilename) then with CountriesDbf do begin
TableLevel:=7;
Exclusive:=True;
FieldDefs.Add('ID', ftAutoInc, 0, True);
FieldDefs.Add('CountryName', ftString, 25, True);
FieldDefs.Add('Capital', ftString, 25, True);
CreateTable;
Open;
Append;
// Fields[0].AsInteger:=100; // Do not fill 'ID' because its type is ftAutoInc
fields[1].AsString:='France';
Fields[2].AsString:='Paris';
Post;
Append;
// Fields[0].AsInteger:=101;
fields[1].AsString:='Egypt';
Fields[2].AsString:='Cairo';
Post;
Append;
// Fields[0].AsInteger:=102;
fields[1].AsString:='Indonesia';
Fields[2].AsString:='Jakarta';
Post;
Append;
// Fields[0].AsInteger:=103;
fields[1].AsString:='Austria';
Fields[2].AsString:='Vienna';
Post;
AddIndex('idxByID', 'ID', [ixPrimary,ixUnique]);
AddIndex('idxByCountry', 'CountryName', [ixCaseInsensitive]);
AddIndex('idxByCapital', 'Capital', [ixCaseInsensitive]);
end;
CountriesDbf.Open;
dbfSource.DataSet:=CountriesDbf;
grid.DataSource:=dbfSource;
Navigator.DataSource:=dbfSource;
end;
procedure TForm1.BSortByCapitalClick(Sender: TObject);
begin
CountriesDbf.IndexName:='idxByCapital';
end;
procedure TForm1.BSortByCountryClick(Sender: TObject);
begin
CountriesDbf.IndexName:='idxByCountry';
end;
procedure TForm1.BSortByIDClick(Sender: TObject);
begin
CountriesDbf.IndexName:='idxByID';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
with CountriesDbf do begin
CloseIndexFile('idxByCapital');
CloseIndexFile('idxByCountry');
CloseIndexFile('idxByID');
end;
CountriesDbf.Close;
end;
end.
Form
object Form1: TForm1
Left = 229
Height = 270
Top = 94
Width = 420
Caption = 'Form1'
ClientHeight = 270
ClientWidth = 420
OnCreate = FormCreate
OnDestroy = FormDestroy
LCLVersion = '1.6.0.2'
object grid: TDBGrid
Left = 0
Height = 200
Top = 0
Width = 420
Align = alTop
Color = clWindow
Columns = <>
TabOrder = 0
end
object Navigator: TDBNavigator
Left = 0
Height = 25
Top = 200
Width = 420
Align = alTop
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsScaleChilds
ChildSizing.EnlargeVertical = crsScaleChilds
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 100
ClientHeight = 25
ClientWidth = 420
Options = []
TabOrder = 1
end
object BSortByCountry: TButton
Left = 12
Height = 23
Top = 234
Width = 101
AutoSize = True
Caption = 'Sort by country'
OnClick = BSortByCountryClick
TabOrder = 2
end
object BSortByCapital: TButton
Left = 168
Height = 23
Top = 234
Width = 95
AutoSize = True
Caption = 'Sort by capital'
OnClick = BSortByCapitalClick
TabOrder = 3
end
object BSortByID: TButton
Left = 318
Height = 23
Top = 234
Width = 75
AutoSize = True
Caption = 'Sort by ID'
OnClick = BSortByIDClick
TabOrder = 4
end
object dbfSource: TDataSource
left = 53
top = 99
end
end