Een Lazarus programma met gebruik van de BufDataset in plaats van een Database als SQLite of Firebird.
Opbouw applicatie.
Start een nieuwe Lazarus applicatie:
Afbeelding 1: Nieuwe applicatie aanmaken.
Druk op de OK knop om een lege applicatie aan te maken. Zet vervolgens de volgende componenten op het form:
- BufDataset van de Data Access tab
- DataSource van de Data Access tab
- DBNavigator van de Data Controls tab
- DBGrid van de Data Controls tab
- Label van de Standard tab
- ComboBox van de Standard tab
Je zou nu het volgende in de designer moeten hebben:
Afbeelding 2: Design adressen.
Zet de volgende eigenschappen bij de BufDataset:
Druk op de drie puntjes achter FieldDefs in de Object Inspector (...) om de editor te openen. Druk 6x op de Toevoegen (+) toets om 6 velden toe te voegen zet per veld de volgende eigenschappen:
Afbeelding 3: Fielddefs van de BufDataset.
Bij ID:
- DataType: ftAutoinc
- Name: ID
Bij Naam:
- DataType: ftString
- Name: Naam
- Size: 20
Bij Achternaam:
- DataType: ftString
- Name: Achternaam
- Size: 20
Bij Straat:
- DataType: ftString
- Name: Straat
- Size: 20
Bij Postcode:
- DataType: ftString
- Name: Postcode
- Size: 7
Bij Woonplaats:
- DataType: ftString
- Name: Woonplaats
- Size: 20
Zet bij DataSource de eigenschap Dataset op BufDataset1.
Zet bij DBNavigator de eigenschap DataSource op DataSource1 om verbinding met de Dataset te maken.
Zet bij DBGrid de volgende eigenschappen:
- Anchors: [akTop,akLeft,akRight,akBottom] om de grid mee te laten bewegen met het form.
- DataSource: Datasource1 voor de verbinding met de Dataset.
Zet bij het Label de Caption op Sorteer veld:
Zet bij de ComboBox de Items als volgt: (Druk op de drie puntjes achter Items (...) om de editor te openen)
Afbeelding 4: Editor Items ComboBox.
Zet bij het Form de Caption op Adressenlijst.
Save het project als adressen.lpi en het form als main.pas.
Code.
Vervolgens nog wat code voor een goede werking van het programma. Eerst het OnCreate event van het form:
procedure TForm1.FormCreate(Sender: TObject);
begin
if FileExists('adressen.bds') then
BufDataset1.LoadFromFile('adressen.bds')
else
begin
BufDataset1.CreateDataset;
BufDataset1.SaveToFile('adressen.bds');
end;
end;
Vervolgens het OnClose event:
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
BufDataset1.SaveToFile('adressen.bds');
CloseAction := caFree;
end;
En vervolgens de OnChange event van de ComboBox:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
BufDataset1.IndexFieldNames := Combobox1.Text;
BufDataset1.First;
end;
En als laatste de OnTiltleClick event van de DBGrid om te kunnen sorteren:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
BufDataset1.IndexFieldNames := Column.FieldName;
ComboBox1.Text := Column.FieldName;
BufDataset1.First;
end;
Resultaat.
Het lopende programma ziet er nu als volgt uit:
Afbeelding 5: Draaiend programma met voorbeeld data.
Met de combobox bepaal je op welk veld gesorteerd wordt of je klikt op de veldnaam in de header van de grid. Door de ID als Autoinc veld te definiëren wordt deze automatisch gevuld met een oplopende waarde. Dit werkt hier wel en niet bij de MemDataset. De source code van dit project is te downloaden van mijn GitHub pagina.
©2022 Don Wilbrink.
E-mail: d.wilbrink@freedom.nl