Nun bin ich zumindest froh, dass hier sich die Leute Mühe geben, mir auf die Sprünge zu helfen.
Ich komme von Delphi7, daher habe ich lediglich die zwingend erforderlichen Parameter mit sinnvollen Werten gefüllt.
Die Datenbank heißt
SQL3DB.db und die Tabelle
Artikel. Der SQL-Code für die Erstellung via sqlitebrowser (
http://sqlitebrowser.org) lautet:
Code: Alles auswählen
CREATE TABLE "Artikel" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
"Code" NUMERIC,
"Bezeichnung" varchar(20)
)
Ich habe abgesehen von dem Commit ausschließlich nur die graphischen Komponenten integriert und mit Daten versehen:
Die unit.lfm schaut so aus:
Unit.lfm
Code: Alles auswählen
object Form1: TForm1
Left = 655
Height = 308
Top = 311
Width = 563
Caption = 'Form1'
ClientHeight = 308
ClientWidth = 563
OnCreate = FormCreate
LCLVersion = '2.0.12.0'
object DBGrid1: TDBGrid
Left = 16
Height = 176
Top = 16
Width = 272
Color = clWindow
Columns = <>
DataSource = DataSource1
TabOrder = 0
end
object DBNavigator1: TDBNavigator
Left = 16
Height = 25
Top = 200
Width = 272
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsScaleChilds
ChildSizing.EnlargeVertical = crsScaleChilds
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 100
ClientHeight = 25
ClientWidth = 272
DataSource = DataSource1
Options = []
TabOrder = 1
end
object Button1: TButton
Left = 296
Height = 25
Top = 200
Width = 75
Caption = 'Commit'
OnClick = Button1Click
TabOrder = 2
end
object SQLite3Connection1: TSQLite3Connection
Connected = True
LoginPrompt = False
DatabaseName = '/home/administrator/Dokumente/Projekte/sqlite3demo/SQL3DB.db'
KeepConnection = False
Transaction = SQLTransaction1
AlwaysUseBigint = False
Left = 440
Top = 24
end
object SQLTransaction1: TSQLTransaction
Active = True
Action = caCommit
Database = SQLite3Connection1
Left = 440
Top = 98
end
object SQLQuery1: TSQLQuery
IndexName = 'DEFAULT_ORDER'
MaxIndexesCount = 4
FieldDefs = <
item
Name = 'id'
DataType = ftAutoInc
Precision = -1
end
item
Name = 'Code'
DataType = ftLargeint
Precision = -1
end
item
Name = 'Bezeichnung'
DataType = ftString
Precision = -1
Size = 20
end>
Active = True
Database = SQLite3Connection1
Transaction = SQLTransaction1
SQL.Strings = (
'select * from Artikel;'
)
Params = <>
Left = 328
Top = 24
end
object DataSource1: TDataSource
DataSet = SQLQuery1
Left = 333
Top = 98
end
end
Und in der unit.pas ist folgender Code enthalten:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, SQLite3Conn, SQLDB, DB, Forms, Controls, Graphics, Dialogs,
DBGrids, DBCtrls, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
SQLite3Connection1: TSQLite3Connection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
SQLTransaction1.Commit;
end;
end.
Nach meinem Verständnis und mit der Arbeit mit Delphi und einer Vielzahl von SQL-Datenbanken, reicht der SQL-Befehl für den Abruf der Daten aus, damit die Komponenten, die jeweiligen SQL-Befehle für die Insert, Updates und Delete kreieren kann. Während der Laufzeit gelingen auch die Inserts, Updates und Delete, allerdings steht das Commit noch aus. Sobald das (z.Zt auf Taste, automatisch habe ich noch ganz andere Probleme) folgt, wird die Verbindung zur Datenbank schlicht geschlossen, ohne dass eine Änderung erfolgt.