Lazarus example added
This commit is contained in:
BIN
Examples/Lazarus/lazarus.ico
Normal file
BIN
Examples/Lazarus/lazarus.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
95
Examples/Lazarus/lazarus.lpi
Normal file
95
Examples/Lazarus/lazarus.lpi
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="lazarus"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<Icon Value="0"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||||
|
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="2">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="lazarus.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="lazarus"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="main.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form_Main"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="Main"/>
|
||||||
|
</Unit1>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="../Bin/lazarus"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<OtherUnitFiles Value="../../Source"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
</Debugging>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
||||||
21
Examples/Lazarus/lazarus.lpr
Normal file
21
Examples/Lazarus/lazarus.lpr
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
program Lazarus;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}{$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms, Main
|
||||||
|
{ you can add units after this };
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
RequireDerivedFormResource := True;
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TForm_Main, Form_Main);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
||||||
50
Examples/Lazarus/lazarus.lps
Normal file
50
Examples/Lazarus/lazarus.lps
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectSession>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<BuildModes Active="Default"/>
|
||||||
|
<Units Count="3">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="lazarus.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="lazarus"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="main.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="Form_Main"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="Main"/>
|
||||||
|
<IsVisibleTab Value="True"/>
|
||||||
|
<EditorIndex Value="0"/>
|
||||||
|
<WindowIndex Value="0"/>
|
||||||
|
<TopLine Value="13"/>
|
||||||
|
<CursorPos X="1" Y="1"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
<LoadedDesigner Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="../../\Source\SQLite3.pas"/>
|
||||||
|
<UnitName Value="SQLite3"/>
|
||||||
|
<WindowIndex Value="0"/>
|
||||||
|
<TopLine Value="794"/>
|
||||||
|
<CursorPos X="3" Y="811"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit2>
|
||||||
|
</Units>
|
||||||
|
<General>
|
||||||
|
<ActiveWindowIndexAtStart Value="0"/>
|
||||||
|
</General>
|
||||||
|
<JumpHistory Count="1" HistoryIndex="0">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="main.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="13"/>
|
||||||
|
</Position1>
|
||||||
|
</JumpHistory>
|
||||||
|
</ProjectSession>
|
||||||
|
<EditorMacros Count="0"/>
|
||||||
|
</CONFIG>
|
||||||
BIN
Examples/Lazarus/lazarus.res
Normal file
BIN
Examples/Lazarus/lazarus.res
Normal file
Binary file not shown.
53
Examples/Lazarus/main.lfm
Normal file
53
Examples/Lazarus/main.lfm
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
object Form_Main: TForm_Main
|
||||||
|
Left = 394
|
||||||
|
Height = 396
|
||||||
|
Top = 139
|
||||||
|
Width = 657
|
||||||
|
Caption = 'Lazarus SQLite Example'
|
||||||
|
ClientHeight = 396
|
||||||
|
ClientWidth = 657
|
||||||
|
Position = poScreenCenter
|
||||||
|
LCLVersion = '1.1'
|
||||||
|
object Memo_Result: TMemo
|
||||||
|
Left = 154
|
||||||
|
Height = 396
|
||||||
|
Top = 0
|
||||||
|
Width = 503
|
||||||
|
Align = alClient
|
||||||
|
BorderStyle = bsNone
|
||||||
|
Color = 4207920
|
||||||
|
Font.Color = 16773344
|
||||||
|
ParentFont = False
|
||||||
|
ScrollBars = ssVertical
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object Panel_Actions: TPanel
|
||||||
|
Left = 0
|
||||||
|
Height = 396
|
||||||
|
Top = 0
|
||||||
|
Width = 154
|
||||||
|
Align = alLeft
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 396
|
||||||
|
ClientWidth = 154
|
||||||
|
TabOrder = 1
|
||||||
|
object Button_DB_Read: TButton
|
||||||
|
Left = 8
|
||||||
|
Height = 33
|
||||||
|
Top = 48
|
||||||
|
Width = 136
|
||||||
|
Caption = 'Read Database'
|
||||||
|
OnClick = Button_DB_ReadClick
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object Button_DB_Create: TButton
|
||||||
|
Left = 8
|
||||||
|
Height = 33
|
||||||
|
Top = 8
|
||||||
|
Width = 136
|
||||||
|
Caption = 'Create Database'
|
||||||
|
OnClick = Button_DB_CreateClick
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
225
Examples/Lazarus/main.pas
Normal file
225
Examples/Lazarus/main.pas
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
unit Main;
|
||||||
|
|
||||||
|
{$MODE DELPHI}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||||
|
ExtCtrls;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TForm_Main }
|
||||||
|
|
||||||
|
TForm_Main = class(TForm)
|
||||||
|
Panel_Actions: TPanel;
|
||||||
|
Button_DB_Read: TButton;
|
||||||
|
Button_DB_Create: TButton;
|
||||||
|
Memo_Result: TMemo;
|
||||||
|
procedure Button_DB_CreateClick(Sender: TObject);
|
||||||
|
procedure Button_DB_ReadClick(Sender: TObject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Form_Main: TForm_Main;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
SQLite3, SQLite3Wrap;
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{ TForm_Main }
|
||||||
|
|
||||||
|
procedure TForm_Main.Button_DB_CreateClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
DB: TSQLite3Database;
|
||||||
|
Stmt: TSQLite3Statement;
|
||||||
|
IDs: array[1..6] of Integer;
|
||||||
|
begin
|
||||||
|
// Delete database if it already exists
|
||||||
|
DeleteFile('artists.db');
|
||||||
|
|
||||||
|
// Create datatbase and fill it with example data
|
||||||
|
DB := TSQLite3Database.Create;
|
||||||
|
try
|
||||||
|
DB.Open('artists.db');
|
||||||
|
|
||||||
|
// Create table "artists"
|
||||||
|
DB.Execute('CREATE TABLE artists (name TEXT, born REAL, died REAL)');
|
||||||
|
|
||||||
|
// Fill the table with artists
|
||||||
|
Stmt := DB.Prepare('INSERT INTO artists (name, born, died) VALUES (?, ?, ?)');
|
||||||
|
try
|
||||||
|
Stmt.BindText (1, 'Leonardo da Vinci');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1452, 4, 15));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1519, 5, 2));
|
||||||
|
|
||||||
|
Stmt.StepAndReset; // StepAndReset executes a prepared statement
|
||||||
|
// and resets it so we can reuse it again
|
||||||
|
|
||||||
|
IDs[1] := DB.LastInsertRowID; // Save newly added artist's ID to use it
|
||||||
|
// when filling "paintings" table below
|
||||||
|
|
||||||
|
Stmt.BindText (1, 'Raphael');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1483, 3, 28));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1520, 4, 6));
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
IDs[2] := DB.LastInsertRowID;
|
||||||
|
|
||||||
|
Stmt.BindText (1, 'Arkhip Kuindzhi');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1842, 1, 27));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1898, 7, 24));
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
IDs[3] := DB.LastInsertRowID;
|
||||||
|
|
||||||
|
Stmt.BindText (1, 'Nicholas Roerich');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1874, 10, 9));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1947, 12, 13));
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
IDs[4] := DB.LastInsertRowID;
|
||||||
|
|
||||||
|
Stmt.BindText (1, 'Ivan Aivazovsky');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1817, 7, 29));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1900, 5, 5));
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
IDs[5] := DB.LastInsertRowID;
|
||||||
|
|
||||||
|
Stmt.BindText (1, 'Ivan Shishkin');
|
||||||
|
Stmt.BindDouble(2, EncodeDate(1832, 1, 25));
|
||||||
|
Stmt.BindDouble(3, EncodeDate(1898, 3, 20));
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
IDs[6] := DB.LastInsertRowID;
|
||||||
|
finally
|
||||||
|
Stmt.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Create table "paintings"
|
||||||
|
DB.Execute('CREATE TABLE paintings (title TEXT, year INTEGER, artist INTEGER)');
|
||||||
|
|
||||||
|
// Fill the table with paintings info
|
||||||
|
Stmt := DB.Prepare('INSERT INTO paintings (title, year, artist) VALUES (?, ?, ?)');
|
||||||
|
try
|
||||||
|
// Leonardo da Vinci
|
||||||
|
Stmt.BindText(1, 'The Virgin and Child with St. Anne');
|
||||||
|
Stmt.BindInt (2, 1508);
|
||||||
|
Stmt.BindInt (3, IDs[1]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Mona Lisa');
|
||||||
|
Stmt.BindInt (2, 1519);
|
||||||
|
Stmt.BindInt (3, IDs[1]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
// Raphael
|
||||||
|
Stmt.BindText(1, 'Sistine Madonna');
|
||||||
|
Stmt.BindInt (2, 1514);
|
||||||
|
Stmt.BindInt (3, IDs[2]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Transfiguration');
|
||||||
|
Stmt.BindInt (2, 1520);
|
||||||
|
Stmt.BindInt (3, IDs[2]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
// Arkhip Kuindzhi
|
||||||
|
Stmt.BindText(1, 'After a rain');
|
||||||
|
Stmt.BindInt (2, 1879);
|
||||||
|
Stmt.BindInt (3, IDs[3]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Elbrus');
|
||||||
|
Stmt.BindInt (2, 1895);
|
||||||
|
Stmt.BindInt (3, IDs[3]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
// Nicholas Roerich
|
||||||
|
Stmt.BindText(1, 'To Kailas. Lahul');
|
||||||
|
Stmt.BindInt (2, 1932);
|
||||||
|
Stmt.BindInt (3, IDs[4]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Krishna');
|
||||||
|
Stmt.BindInt (2, 1929);
|
||||||
|
Stmt.BindInt (3, IDs[4]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
// Ivan Aivazovsky
|
||||||
|
Stmt.BindText(1, 'The Mary Caught in a Storm');
|
||||||
|
Stmt.BindInt (2, 1892);
|
||||||
|
Stmt.BindInt (3, IDs[5]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Brig "Mercury" Attacked by Two Turkish Ships');
|
||||||
|
Stmt.BindInt (2, 1892);
|
||||||
|
Stmt.BindInt (3, IDs[5]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
// Ivan Shishkin
|
||||||
|
Stmt.BindText(1, 'Morning in a Pine Forest');
|
||||||
|
Stmt.BindInt (2, 1889);
|
||||||
|
Stmt.BindInt (3, IDs[6]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
|
||||||
|
Stmt.BindText(1, 'Wood Distances');
|
||||||
|
Stmt.BindInt (2, 1884);
|
||||||
|
Stmt.BindInt (3, IDs[6]);
|
||||||
|
Stmt.StepAndReset;
|
||||||
|
finally
|
||||||
|
Stmt.Free;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
DB.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm_Main.Button_DB_ReadClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
DB: TSQLite3Database;
|
||||||
|
Stmt_Artists,
|
||||||
|
Stmt_Paintings: TSQLite3Statement;
|
||||||
|
begin
|
||||||
|
if not FileExists('artists.db') then
|
||||||
|
begin
|
||||||
|
ShowMessage('The database does not exist. Please create one.');
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DB := TSQLite3Database.Create;
|
||||||
|
try
|
||||||
|
DB.Open('artists.db');
|
||||||
|
|
||||||
|
// Show all artists and their paintings
|
||||||
|
Stmt_Artists := DB.Prepare('SELECT rowid, name, born, died FROM artists ORDER BY born');
|
||||||
|
Stmt_Paintings := DB.Prepare('SELECT title, year FROM paintings WHERE artist = ? ORDER BY year');
|
||||||
|
try
|
||||||
|
while Stmt_Artists.Step = SQLITE_ROW do
|
||||||
|
begin
|
||||||
|
Memo_Result.Lines.Add(Stmt_Artists.ColumnText(1));
|
||||||
|
Memo_Result.Lines.Add(DateToStr(Stmt_Artists.ColumnDouble(2)) + ' - ' + DateToStr(Stmt_Artists.ColumnDouble(3)));
|
||||||
|
|
||||||
|
Memo_Result.Lines.Add('paintings:');
|
||||||
|
Stmt_Paintings.BindInt(1, Stmt_Artists.ColumnInt(0));
|
||||||
|
while Stmt_Paintings.Step = SQLITE_ROW do
|
||||||
|
Memo_Result.Lines.Add(' ' + Stmt_Paintings.ColumnText(0) + ' (' + Stmt_Paintings.ColumnText(1) + ')');
|
||||||
|
Stmt_Paintings.Reset;
|
||||||
|
|
||||||
|
Memo_Result.Lines.Add('');
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
Stmt_Paintings.Free;
|
||||||
|
Stmt_Artists.Free;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
DB.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Add separator
|
||||||
|
Memo_Result.Lines.Add('------------------------------------------------');
|
||||||
|
Memo_Result.Lines.Add('');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
Reference in New Issue
Block a user