Hallo Zusammen!
Hier mein erstes Tutorial!
Diese Infos habe ich nur durch die Hilfe von
mkinzler und zahlreichen google infos zusammen stellen können.
Die Aufgabe:
Mit Delphieigenen Komponenten eine Firebird Datenbank und Tabelle zu erzeugen. (embedded Version 2.01 von Firebird)
Vorbereitung:
Auf ein Formular werden folgende Komponenten geklicket...
Delphi-Quellcode:
IBDatabase1: TIBDatabase;
IBTable1: TIBTable;
IBTransaction1: TIBTransaction;
IBSQL1: TIBSQL;
DataSource1: TDataSource;
DBGrid1: TDBGrid; // Damit man auch ein Ergebniss sieht.
Button1: TButton;
Danach die "üblichen" verdächtigen miteinander verlinken...
IBTable1 -> IBDatabase1
IBTable1 -> IBTransaction1
IBTransaction1 -> IBDatabase1
IBSQL1 -> IBDatabase1
IBSQL1 -> IBTransaction1
DBGrid1 -> Datasource1
Datasource1 -> IBTable1
Button1 -> Button1Click
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
IBDatabase1.DatabaseName := '
GameDB.fdb';
IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('
USER ''
SYSDBA''
');
// Wenn hier USER_NAME angegeben wird funktioniert es nicht!
IBDatabase1.Params.Add('
PASSWORD ''
masterkey''
');
// Natürlich "nur" mit Leertaste
IBDatabase1.Params.Add('
PAGE_SIZE 4096');
IBDatabase1.Params.Add('
DEFAULT CHARACTER SET WIN1250');
IBDatabase1.CreateDatabase;
IBDatabase1.Connected := false;
IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('
USER_NAME=SYSDBA');
// Wenn hier USER angegeben wird funktioniert es nicht!
IBDatabase1.Params.Add('
PASSWORD=masterkey');
// Natürlich "nur" mit "="
IBDatabase1.Connected := true;
IBTransaction1.Active := true;
with IBTable1
do begin
active:=false;
// Tablen-Zugriff muss auf jeden Fall geschlossen sein
TableName:='
HIGHSCORE';
// Tabellen Name IN UPPERCASE!!!
// SONST FUNKTIONIERT ES NICHT
with FieldDefs
do begin // Eine kleine Tabelle um Highscores zu speichern...
clear;
Add('
ID', ftInteger, 0, false);
// AUTOINC Gibt es nicht, folgt später!!!
Add('
Game', ftString, 20, false);
Add('
UserID', ftString, 8, false);
Add('
PlayScore', ftInteger, 0, false);
Add('
PlayLevel', ftInteger, 0, false);
Add('
Playername', ftString, 40, false);
Add('
PlayerURL', ftString, 80, false);
Add('
PlayereMail', ftString, 80, false);
Add('
PlayerMessenger', ftString, 80, false);
Add('
Datum', ftDateTime, 0, false);
// NICHT ETWAR TIMESTAMP das gibt es nicht...
end;
CreateTable;
end;
IBTransaction1.Commit;
// MUSS ERSTMAL WEG SONST GEHT DER TRIGGER NICHT
IBTransaction1.Active := true;
IBSQL1.SQL.Text := '
CREATE GENERATOR autoinc;';
IBSQL1.ExecQuery;
IBSQL1.SQL.Text := '
SET GENERATOR autoinc TO 0;';
IBSQL1.ExecQuery;
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('
CREATE TRIGGER OhMannFirebird for HIGHSCORE');
IBSQL1.SQL.Add('
active before insert position 0');
IBSQL1.SQL.Add('
as');
IBSQL1.SQL.Add('
begin');
IBSQL1.SQL.Add('
new.id = gen_id( autoinc, 1 );');
IBSQL1.SQL.Add('
end');
IBSQL1.ExecQuery;
IBTransaction1.Commit;
// und mal einen Testdatensatz erzeugen
IBTransaction1.Active := true;
IBSQL1.SQL.Text := '
INSERT INTO HIGHSCORE("Game") VALUES (''
Tetris''
);';
// ACH JA HIER MUSSTE ES NATÜRLICH AUCH WIEDER ANDERS SEIN...
// Immer schön "Quoten" wenn die Felder kleine Buchstaben haben
// Und bitte Strings natürlich auch immer in... Nein die brauchen wieder "nur" '
IBSQL1.ExecQuery;
IBTransaction1.Commit;
IBTable1.Active := true;
// So jetzt haben wir endlich eine MySQL Tabelle die Funktioniert wie "wir" es erwarten...
end;
Ich hoffe es erspart Euch die lange Sucherei!!!
Grüsse Frank