Ich habe mich bis jetzt mit ADO (Access) und ADS Datenbank beschäftigt.
Als nächtes will ich mich nun mit der Firebird Datenbank beschäftigen und habe dazu schon einige Tutorial durchgelesen und folgendes herausgefunden um eine neue Datenbank anzulegen.
Um die Datenbank anzulegen habe ich mir folgende Prozedure geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var ProgPath, DBName, LoginName, PW: string;
begin ProgPath := ExtractFilePath(paramstr(0));
DBName := ProgPath + 'TestDB.fdb'; LoginName := 'USER'; PW:= 'xxxxxx';
Form1.Con1.Disconnect; Form1.Con1.Database:=DBName; Form1.Con1.Protocol :='Firebird-1.5'; Form1.Con1.Properties.Add('CreateNewDatabase=CREATE DATABASE ' + DBName + ' USER ' + QuotedStr(LoginName) + ' PASSWORD ' + QuotedStr(PW) + ' PAGE_SIZE 4096 ' + ' DEFAULT CHARAcTER SET ISO8859_1'); Form1.Con1.Connect;
End; |
Ich hoffe mal, dass das soweit richtig ist, wenn nicht bitte melden.
Danach nehme ich mir einen Query und schreibe die 'Create Table' Sachen rein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| try Form1.QPers.SQL.Clear; Form1.QPers.SQL.Add(cCreateDB1); Form1.QPers.ExecSQL; except else MessageDlg(Format('FEHLER!%sDie Tabelle DB1 konnte nicht angelegt werden!', [#13#10]), mtError, [mbCancel], 0); end;
try Form1.QPers.SQL.Clear; Form1.QPers.SQL.Add(cCreateDB2); Form1.QPers.ExecSQL; except else MessageDlg(Format('FEHLER!%sDie Tabelle DB2 konnte nicht angelegt werden!', [#13#10]), mtError, [mbCancel], 0); end; |
In cCreateDB1 habe ich z.B. folgendes drin stehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const cCRLF = #13#10; cCreateDB1 = 'CREATE TABLE Pers(' + cCRLF + 'PersID PRIMARY KEY,' + cCRLF + 'Vorname varchar(60),' + cCRLF + 'Name varchar(60),' + cCRLF + 'Strasse varchar(60),' + cCRLF + 'PLZ varchar(5),' + cCRLF + 'Ort varchar(60),' + cCRLF + 'Tel1 varchar(40),' + cCRLF + 'Tel2 varchar(40),' + cCRLF + 'Markierung varchar(60),' + cCRLF + 'Datum DateTime,' + cCRLF + 'Info Memo)'; |
Ich hoffe dass dies so richtig ist.
Als nächstes bekomme ich das Problem, dass es bei Firebird keine autoinc-funktion gibt, die mir meine ID beim anlegen eines neuen Datensatzes hochzählt.
Im 'Getting startet with firebird' habe ich folgendes gelesen um das durch einen Trigger zu realisieren.
Verstanden habe ich das aber nicht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| In den Trigger einbauen: CREATE GENERATOR my_gen_id; SELECT gen_id(my_gen_id,0) FROM... SET GENERATOR my_gen_id TO [some_value];
Create Trigger autinc_id for new_one active before insert position 0 AS BEGIN if(NEW.col1 IS NULL) THEN NEW.col1=GEN_ID(my_gen_id,1); END |
Ist es sinnvoll das einzubauen, oder soll ich einfach vor dem append auf letzten Datensatz springen und die letzte ID lesen und dann erhöhen für die neue ID.
Oder gibt es noch etwas einfacheres um eine eindeutige ID pro Table zu bekommen ?
Falls es noch etwas wichtiges zu sagen gibt zu einem Firebirdanfänger dann nur zu, bin für jede Info dankbar, die mir später zeit und ärger erspart wenn die Applikation fertig ist.