[gelöst]Neue Db mit firebird embedded anlegen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

[gelöst]Neue Db mit firebird embedded anlegen

Beitrag von ralli »

Ich habe jetzt den Firebird Superserver 2.04 in Verbindung mit Lazarus im Einsatz und alles funktioniert einwandfrei. Jetzt mache ich meine ersten Erfahrungen mit dem Firebird embedded Server 2.04.
Mit einer existierenden Datenbank arbeitet der Embedded Server einwandfrei.
Mit dem echten Server war es mit den Zeos Komponenten bisher möglich, auf diese Art eine neue Datenbank anzulegen:

Code: Alles auswählen

Datenbank.Disconnect;
Datenbank.Database := '/home/ralph/test.fdb';
Datenbank.Protocol := 'firebird-2.0';
Datenbank.HostName := 'localhost#;
 
Datenbank.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
      QuotedStr ('/home/ralph/test.fdb') + ' USER ' +
      QuotedStr ('SYSDBA') + ' PASSWORD ' + QuotedStr ('masterkey') +
      ' PAGE_SIZE 4096 DEFAULT CHARACTER SET utf8');
 
Datenbank.Connect;
Die Embedded Version benötigt ja keine Authentifizierung und auch keinen Hostnamen, so habe ich es in vielen Dokus gelesen.
Daher fällt user sysdba und password masterkey weg.
So soll es angeblich gehen:

Code: Alles auswählen

Datenbank.Disconnect;
Datenbank.Database := '/home/ralph/test.fdb';
Datenbank.Protocol := 'firebirdd-2.0';
 
Datenbank.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
      QuotedStr ('/home/ralph/test.fdb') +
      ' PAGE_SIZE 4096 DEFAULT CHARACTER SET utf8');
 
Datenbank.Connect;
Aber das funktioniert nicht, wer hat Erfahrung mit dem Embedded Server ? Lässt sich damit überhaupt eine neue Datenbank anlegen ? Und wenn, dann bitte wie ?
Zuletzt geändert von ralli am Do 9. Apr 2009, 14:29, insgesamt 1-mal geändert.
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

Was funktioniert den nicht, die Verbindung oder nur das anlegen?

Ich kann da nur sagen, das ich auch zum embedded-Server immer nen Passwort und nen Benutzer angebe. Zwar wird eine Rechteverwaltung nicht unterstützt, aber ich geb immer SYSDBA mit an. Hast du es mal probiert, es mit anzugeben?

Ansonsten arbeite ich zwar oft mit de embedded, allerdings hab ich nie über Lazarusanwendungen Datenbanken angelegt.
Johannes

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

Das Anlegen funktioniert nicht, das Verbinden schon. Ich habe es auch schon mit SYSDBA und masterkey versucht, aber das klappt auch nicht. Mein Homeverzeicnis ist ja explizit fürs Schreiben der Gruppe firebird freigegeben und mit dem echten Server macht er das auch, aber halt nicht mit dem embeddet. Nun, dann muss ich eben dem FBteacher ein leere Dummydatenbank mitgeben. Es ist schade, das für bestimmte Anwendungen dann auch wieder der echte Server installiert sein muss, das wollte ich für bestimmte Anwenundungen ja vermeiden.
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

Fakt ist aber, der embedded-Server kann sehr wohl Datenbanken erstellen. Ich habe es gerade probiert. Flamerobin bspw. erstellt problemlos mit dem embedded-Server eine DB.
Johannes

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

@monta, kannst Du mir bitte mal den Code zeigen, damit ich Schritt für Schritt nachvollziehen kann, wo der Fehler bei mir liegt ?
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

Naja...Flamerobin erstellt ja quasi keinen Code...ich wollte nur erstmal testen ob es generll mit dem embedded geht.

Ich probier dann mal, das in Lazarus zu machen.
Johannes

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

so...also SQLDB ist da wesentlich einfacher...hier meine Lösung, die sowohl über SQLDB als auch Zeos und Firebird-embedded eine neue DB anlegt:

Code: Alles auswählen

//mit SQLDB:
DatenbankSQLDB.DatabaseName := 'test.fdb';
DatenbankSQLDB.UserName := 'SYSDBA';
DatenbankSQLDB.Password := 'masterkey';
DatenbankSQLDB.CreateDB;
//mit Zeos:
DatenbankZeos.Protocol := 'firebird-2.0';
DatenbankZeos.HostName := '';
DatenbankZeos.Database:='testzeos.fdb';
DatenbankZeos.User:='SYSDBA';
DatenbankZeos.Password:='masterkey';
DatenbankZeos.Properties.Add ('CreateNewDatabase=CREATE DATABASE ''testzeos.fdb'' USER ''SYSDBA'' PASSWORD ''masterkey'' PAGE_SIZE = 4096 DEFAULT CHARACTER SET WIN1251');
DatenbankZeos.Connect;
//DatenbankZeos.Disconnect;
Ich hab es in einer VM unter windows probiert, aber das Prinzip klärt es ja...es geht auch mit dem embedded-Server.
Ich nehm mal an, du bist eh unter Windows, da es doch unter Linux nicht so leicht nen embedded-Server gab, oder hast du dir den zusammengebastelt?
Johannes

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

@monta, danke für Deine schnelle Hilfe und Reaktion.

Code: Alles auswählen

DatenbankZeos.Protocol := 'firebird-2.0';
Also das es mit diesem Protokoll läuft, das war mir schon vorher klar.
Die Zeos Kompos benötigen aber folgendes Protokoll für den embedded Server:

Code: Alles auswählen

Datenbank.Protocol := 'firebirdd-2.0'
Probier doch bitte mal aus, was dann bei Dir passiert.
Ich arbeite ausschliesslich unter Linux. Bei dem Debian Linux Lenny muss der embedded Server extra installiert werden. Da brauche ich nichts zu basteln.
Danke für Deine Lösungen, aber die Frage ist immer noch nicht geklärt, ob er mit der emedded Version eine neu DB anlegen kann, ohne das der normale Firebird Superserver installiert wurde und läuft. Das kann ich leider auch nicht ausprobieren, denn dann müsste ich erst den Firebird Superserver deinstallieren. Dann wüsste ich von allen Datenbankprogrammierern, ob sie SQLDB bevorzugen oder lieber die Zeos Komponenten. Sind die bordeigenen Mittel stabil ? Wo sind die Vor- und Nachteile und was bevorzugt Ihr ?
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Neue Db mit firebird embedded anlegen

Beitrag von mse »

ralli hat geschrieben: Mein Homeverzeicnis ist ja explizit fürs Schreiben der Gruppe firebird freigegeben
Der Starter der Anwendung muss Schreibrechte haben, Firebird embedded läuft im Kontext der Anwendung. Da du die DB im home Verzeichnis erstellst, dürfte dies wohl der Fall sein.

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

Ich habe jetzt den fbteacher nach usr/bin kopiert und unter root von der konsole gestartet. Es kommt folgende Fehlermeldung:

TApplication.HandleException SQL Error: cannot attach to password database. Error Code: -902. Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements The SQL: CREATE DATABASE '/home/ralph/testzeos.fdb' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE = 4096 DEFAULT CHARACTER SET UTF8;
Stack trace:
$08360324 CHECKINTERBASE6ERROR, line 817 of /usr/lib/lazarus/components/ZEOSDBO-6.6.4-stable/src/dbc/ZDbcInterbase6Utils.pas
$082F0419 TZINTERBASE6CONNECTION__CREATENEWDATABASE, line 735 of /usr/lib/lazarus/components/ZEOSDBO-6.6.4-stable/src/dbc/ZDbcInterbase6.pas
$082EFCD9 TZINTERBASE6CONNECTION__OPEN, line 540 of /usr/lib/lazarus/components/ZEOSDBO-6.6.4-stable/src/dbc/ZDbcInterbase6.pas
$08272310 TZCONNECTION__CONNECT, line 667 of /usr/lib/lazarus/components/ZEOSDBO-6.6.4-stable/src/component/ZConnection.pas
$0808452A TFORM1__TOOLBUTTON2CLICK, line 131 of unit1.pas
$0814B6E4 TCONTROL__CLICK, line 2095 of ./include/control.inc
$080F2A41 TTOOLBUTTON__CLICK, line 711 of ./include/toolbutton.inc
$080F128E TTOOLBUTTON__MOUSEUP, line 137 of ./include/toolbutton.inc
$0814ABF2 TCONTROL__DOMOUSEUP, line 1631 of ./include/control.inc
$0814B4DD TCONTROL__WMLBUTTONUP, line 2011 of ./include/control.inc
$08069139
$08149758 TCONTROL__PERFORM, line 984 of ./include/control.inc
$08140FFF TWINCONTROL__ISCONTROLMOUSEMSG, line 4163 of ./include/wincontrol.inc
$08142289 TWINCONTROL__WNDPROC, line 4721 of ./include/wincontrol.inc
$08210C47 DELIVERMESSAGE, line 3547 of /home/mattias/pascal/wichtig/tags_0_9_26/lazarus/build/lazarus-0.9.26/lcl/interfaces/gtk/gtkproc.inc
$0821C033 DELIVERMOUSEUPMESSAGE, line 1669 of /home/mattias/pascal/wichtig/tags_0_9_26/lazarus/build/lazarus-0.9.26/lcl/interfaces/gtk/gtkcallback.inc
$0821C130 GTKMOUSEBTNRELEASE, line 1725 of /home/mattias/pascal/wichtig/tags_0_9_26/lazarus/build/lazarus-0.9.26/lcl/interfaces/gtk/gtkcallback.inc

Also, da kann ich mir auch keinen Reim mehr drauf machen, es scheint (fast) ein Bug zu sein.
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

ralli hat geschrieben:@monta, danke für Deine schnelle Hilfe und Reaktion.

Code: Alles auswählen

DatenbankZeos.Protocol := 'firebird-2.0';
Also das es mit diesem Protokoll läuft, das war mir schon vorher klar.
Die Zeos Kompos benötigen aber folgendes Protokoll für den embedded Server:

Code: Alles auswählen

Datenbank.Protocol := 'firebirdd-2.0'
Probier doch bitte mal aus, was dann bei Dir passiert.
Ich arbeite ausschliesslich unter Linux. Bei dem Debian Linux Lenny muss der embedded Server extra installiert werden. Da brauche ich nichts zu basteln.
Danke für Deine Lösungen, aber die Frage ist immer noch nicht geklärt, ob er mit der emedded Version eine neu DB anlegen kann, ohne das der normale Firebird Superserver installiert wurde und läuft.
Wieso ist die Frage nicht beantwortet? Ich habe es mit genau dieser Protokolleinstellung und dem Firebird-embedded-Server ohne irgendeinen installierten Super-/Classicserver probiert. Extra in einer VM, da dort kein Firebirdserver installiert war.

Bei mir hört also der embedded-Server auf das entsprechende Protokoll 'firebird-2.0' als auch auf die Anweisung, eine neue DB anzulegen. Ich versteh nicht ganz, wieso ich da firebirdd-2.0 setzen soll, ich hab embedded und normalen Server immer über das selbe Protokoll laufen. Das ist ja das schöne, das man quasi nichts umstellen muss.
Johannes

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

Wieso ist die Frage nicht beantwortet? Ich habe es mit genau dieser Protokolleinstellung und dem Firebird-embedded-Server ohne irgendeinen installierten Super-/Classicserver probiert. Extra in einer VM, da dort kein Firebirdserver installiert war.
Mein lieber @monta, jetzt verstehe ich, ich konnte ja nicht ahnen, das Du keinen Server installiert hast.
Bei mir hört also der embedded-Server auf das entsprechende Protokoll 'firebird-2.0' als auch auf die Anweisung, eine neue DB anzulegen. Ich versteh nicht ganz, wieso ich da firebirdd-2.0 setzen soll, ich hab embedded und normalen Server immer über das selbe Protokoll laufen. Das ist ja das schöne, das man quasi nichts umstellen muss.
Das wusste ich nicht, damit dürfte das Problem gelöst sein. Mir ist zwar immer noch nicht klar, wofür dann dieses Protokoll firebirdd-2.0 ist, aber Hauptsache es funktioniert, danke. Wenn Du mir jetzt noch eine Empfehlung geben könntest, ob Du SQLDB oder die Zeos Kompos bevorzugst, dann hast Du mich richtig glücklich gemacht. Noch einmal, es würde mich freuen, wenn ich von euch allen hören würde, was Ihr bevorzugt und warum.
Danke! :D
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von monta »

Ich würde keins von beiden wirklich ausschließen. Momentan benutze ich in einem großen Projekt beides, da ich mit SQLDB angefangen hab. Allerdings ergaben sich dann Zwänge welche mich dazu bewegt haben, auf Zeos umzustellen. Im Nachhinein würde ich also alles direkt in Zeos machen.

Bei Abfragen und einfachen Inserts ist finde ich quasi egal. Zeos bietet allerdings einiges mehr. Meine Hauptgrüne für Zeos sind/waren zum einen die bessere Typunterstützung (die sich allerdings sicher gebessert hat) und wesentlich die bessere Kommunikation mit StoredProcedures über die entsprechende Komponente, die von Zeos bereitgestellt wird.
Daher...für einfache Sachen wie bspw. nen Adressbuch oder so, wie es als Demo sehr beliebt ist, ist es egal, da nehm ich auch mal schnell SQLDB weils 'dabei' ist und völlig langt. Für andere Dinge wo bestimmte besonderheiten mit rein spielen, bspw. spezielle Feldtypen, SPs oder das ganze auf Wachstum ausgelegt ist, würde ich wohl Zeos nehmen.
Auch der SQLMonitor von Zeos ist, finde ich, für größere Sachen sehr nützlich.
Johannes

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Neue Db mit firebird embedded anlegen

Beitrag von ralli »

Danke @monta, das hat mir sehr weitergeholfen und ich habe wieder einiges dazugelernt. :D
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: [gelöst]Neue Db mit firebird embedded anlegen

Beitrag von mse »

ralli hat geschrieben:Lässt sich damit überhaupt eine neue Datenbank anlegen ? Und wenn, dann bitte wie ?
Ich kann das Problem mit Firebird embedded 2.1.2 unter Linux bestätigen, und zwar auch mit direktem Aufruf von isc_create_database(). Als normaler user aufgerufen erhalte ich:

Code: Alles auswählen

-operating system directive open failed
 -Permission denied
als root:

Code: Alles auswählen

-operating system directive semget failed
 -No such file or directory
Da ist wohl eine Anfrage bei den Firebird Entwicklern nötig.

Antworten