Entwickler-Ecke
Datenbanken - Firebird Datenbank anlegen
SmileySN - Di 16.05.06 22:41
Titel: Firebird Datenbank anlegen
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.
hansa - Mi 17.05.06 01:19
Titel: Re: Firebird Datenbank anlegen
Nicht schon wieder. 8) Erkläre mir zuerst mal bitte zu welchem Zweck das ganze ist. Also eine DB überhaupt mit selbstgestricktem Programm anzulegen, sonst ist es IMHO zwecklos überhaupt was zu sagen. Das hier gilt ja wohl ?
SmileySN hat folgendes geschrieben: |
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. |
Dann muß ich Dir allerdings sagen, daß ich die DB mit IBExpert mitsamt Triggern usw. also richtig angelegt hätte in derselben Zeit, die es dauert das hier zu schreiben ! Für Dich bedeutet es als Anfänger : <1 Tag Einarbeitung und dann auch in 2 Min. fertig zu sein. Also sage bitte zuerst eine nachvollziehbare Erklärung warum das unbedingt so umständlich gehen muß. Statt eine EXE-Datei zu kopieren, kann man die selbstverständlich auch byteweise mit einem Hex-Editor erstellen. Vielleicht ist das Beispiel extrem genug. :mrgreen:
Lemmy - Mi 17.05.06 07:37
Titel: Re: Firebird Datenbank anlegen
Hi,
SmileySN hat folgendes geschrieben: |
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.
|
Du arbeitest mit Firebird, einer richtigen Multi-User SQL-Datenbank, nicht mehr mit Access! Um an eine eindeutige ID zu kommen, musst Du Generatoren einsetzen, entweder über einen Trigger oder Du holst Dir die ID selbst. Ein Select ID funktioniert auf keinen Fall, spätestens dann nicht mehr wenn 2 User gleichzeitig einen Insert machen.
SChau Dich mal auf meiner Seite um, da findest Du einige Tutorials zum Thema Firebird, SQL und Einstieg. Wenn Du dann konkrete Fragen hast, dann melde Dich nochmal. Die Frage bzgl. der eindeutigen ID in Firebird ist hier im Forum auch schon oft beantwortet worden...
Lemmy
SmileySN - Mi 17.05.06 14:05
Bisher habe ich meist kleine DB-Applikationen geschrieben, die ich dann als .exe Datei weggegeben habe und vor Ort wurde dann die Datenbank erstellt. Das war praktisch, da eine Installation entfällt und auch nur eine Datei weitergegeben weren muss.
Bei CS-Datenbanken sehe ich ein, dass das keinen Sinn mehr macht, da ja der DB-Server sowieso installiert werden muss.
Mit den Tools für Firebird wie IBExpert usw. hatte ich mich noch nicht beschäftigt und muss einsehen, dass es Sinn macht damit zu arbeiten.
Einen Bericht über das ID anlegen mit einem Trigger habe ich gefunden und werde das mal über den IB-Expert ausprobieren.
Dort habe ich aber nur die Trial version gefunden, die Personal wurde zwar erwähnt, ich habe aber kein download davon entdeckt. (Naja im suchen von Infos hab ich ja immer Pech)
Danke an Hansa, der mich auf die Unsinnigkeit meines Tuns hingewiesen hat. Darum habe ich ja auch gefragt, ich will ja gleich von Anfang an den richtigen Weg gehen.
Die Webseite von Lemmy ist wirklich toll, prima Infos und lauter Sachen, die man auch wirklich gebrauchen kann.
Werde Euch dann weiter nerven, wenn ich wieder nicht weiterkomme, bis dahin Danke erst mal.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!