Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird embedded, Datenbank auf Netzlaufwerk (https://www.delphipraxis.net/122333-firebird-embedded-datenbank-auf-netzlaufwerk.html)

SvB 14. Okt 2008 00:09

Datenbank: Firebird embedded • Version: 2.1.1 • Zugriff über: Zeos 6.3.3

Firebird embedded, Datenbank auf Netzlaufwerk
 
Ich spiele gerade mit Zeos und Firebird embedded rum, da ich das für ein Projekt benötige.
Meine Projekte liegen grundsätzlich auf einem Netzwerklaufwerk und ich möchte per Programm die Datenbank im Programmordner erstellen.
Ich bekomme aber immer folgende Fehlermeldung:
Zitat:

Im Projekt xxx.EXE ist eine Exception der EZSQLException mit der Meldung 'SQL Error: Unable to complete network request to host "<IP-Adresse>". Failed to establish a connection. Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort. . Error Code: -902. Unsuccessful execution caused by system error that precludes
successful execution of subsequent Statements The SQL: CREATE DATABASE 'DB.fdb' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1;' aufgetreten
Mein Quellcode sieht folgendermaßen aus
Delphi-Quellcode:
ZConnection1.Database := ExtractFilePath(ParamStr(0)) + 'DB.fdb';
    ZConnection1.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
    QuotedStr(ExtractFilePath(ParamStr(0)) + 'DB.fdb') +
    ' USER ' + QuotedStr ('sysdba') +
    ' PASSWORD ' + QuotedStr ('masterkey') +
    ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    ZConnection1.Connect;
In den Eigenschaften von ZConnection steht folgendes
Delphi-Quellcode:
HostName := '';
Protocol := 'firebirdd-2.0';
Ansonsten ist nichts gesetzt.

Warum versucht Firebird immer über die IP zuzugreifen??????

Wenn ich das ganze so ändere, das die Datenbank direkt auf C:\ erstellt wird, dann funktionierts ohne Probleme.

Delphi-Quellcode:
ZConnection1.Database := 'C:\DB.fdb';
    ZConnection1.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
    QuotedStr('C:\DB.fdb') +
    ' USER ' + QuotedStr ('sysdba') +
    ' PASSWORD ' + QuotedStr ('masterkey') +
    ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    ZConnection1.Connect;
Wo liegt das Problem. Ich suche jetzt schon Stunden in allen möglich Foren, habe aber nichts gefunden.
Es ist auch sonst nicht von Firebird oder Interbase auf meiner Entwicklungsmachine installiert.

Danke
Sven

Hansa 14. Okt 2008 02:07

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Zitat:

Zitat von SvB
Meine Projekte liegen grundsätzlich auf einem Netzwerklaufwerk und ich möchte per Programm die Datenbank im Programmordner erstellen...

Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. -> Grundlagen. Soweit meine Stellungnahme. :mrgreen: Was soll denn das überhaupt werden ? :shock:

Edit : warum soll die DB erst zur Laufzeit erzeugt werden ?

alzaimar 14. Okt 2008 06:37

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
[einmisch]
Zitat:

Zitat von Hansa
Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. -> Grundlagen.

Wo gibt es ein Tutorial über die Dos and Don'ts bei der Verbindung zwischen Delphi und Firebird? Das die Embedded-Version wohl nur exklusiven Zugriff auf eine lokale DB erlaubt, weiss ich... Aber der Rest?
[/einmisch]

SvB 14. Okt 2008 07:59

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Folgender Hintergrund: Ich schreibe gerade an einer Applikation, die, wenn sie fertig ist, auf einem Embedded System mit XP Embedded läuft. Parallel haben wir uns auch eine neue Hardware für die nächste Version zugelegt, die unter Linux läuft und das aktuelle Projekt soll später so umgestellt werden, dass es dann auch mit Freepascal / Lazarus unter Linux läuft. Da ich nur von diesem einen Programm Zugriff auf die Datenbank brauche, habe ich mich im Moment für Firebird Embedded entschieden. Außerdem wollte ich mich damit auch mal etwas beschäftigen um zu sehen wie das funktioniert.
Mein Delphi 2007 ist aktuell in einer XP VM installiert und mein Projekt liegt auf einem Netzwerklaufwerk. Deshalb soll auch die Datenbank im gleichen Ordner auf dem Netzwerklaufwerk liegen.

Zitat:

Zitat von Hansa
Edit : warum soll die DB erst zur Laufzeit erzeugt werden ?

Warum soll man die Datenbank nicht vom Programm aus anlegen lassen. Ich sehe überhaupt gar keinen Grund, warum ich das manuell über irgendein Admin Tool machen sollte. Wenn die Datenbank nicht da ist, wird sie angelegt und ich bin immer sicher, dass das dann auch passt. Ich mache das in der Regel immer so. In eine spezielle Tabelle kommt dann noch eine Versionsnummer der Datenbank rein und wenn es Programmupdates gibt, dann wird die Version der Datenbank abgefragt und eventuell angepasst, falls z.B. in einer Tabelle ein Feld dazu kommt.

Zitat:

Zitat von Hansa
Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. ->

Das verstehe ich nicht. Ich möchte ganz einfach mit einem Programm auf eine Datenbank zugreifen, egal ob die auf einer lokalen Platte oder auf einem Netzwerklaufwerk liegt, dass sollte doch gar nicht so schwierig sein. Ich weiß auch, dass bei Firebird Embedded die Datenbank exklusiv geöffnet wird, was auch beabsichtigt ist, aber das sollte doch auch egal sein, wo sie liegt.

Das fertige Projekt läuft später auf jeden Fall auf einem lokalen Laufwerk, nur möchte ich es halt jetzt zur Entwicklung wie gehabt auf meinem Netzwerklaufwerk auf dem Server belassen, weil Nachts automatisch eine Datensicherung auf Band läuft und ich mir manuelles hin und her kopieren auf ein lokales Laufwerk ersparen möchte. Da können sich nämlich mal dumme Benutzerfehler einschleichen, dass z.B. falsch rum kopiert wird und man sich eine alter Version über neue drüber kopiert. Außerdem möchte ich auch keine zusätzliche Software einsetzen, die so was automatisch macht.

Vielleicht hat ja doch jemand eine Idee, wie ich das, nur zur Entwicklung, so hinbekomme, ansonsten muss ich halt mit einer lokalen Datenbank zur Entwicklungszeit leben. Oder ich probiere einfach mal das ganze direkt als "Superserver" laufen zu lassen, das brauche ich ja dann auch für die Linux Variante, da es dort kein Embedded gibt.

Danke erst mal
Sven

alzaimar 14. Okt 2008 08:05

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Ich finde Deinen Ansatz vernünftig, aber soweit ich das verstanden habe, scheint Embedded-FB und Netzlaufwerk Probleme zu bereiten, weil die FBClient.DLL wohl denkt "Netlaufwerk? Oh, da muss ein Server sein". Versuche es doch einfach mit einer Laufwerksverknüpfung. Da die finale Version eh mit lokalen Daten arbeitet, ist das doch keine Einschränkung (außer von Embedded-FB).

P.S.: Deine Verwunderung über diese unsinnige Einschränkung kann ich nachvollziehen.

Ich halte mich aber lieber aus der Diskussion raus, weil es genügend FB-Cracks hier gibt, die Dir Vorträge darüber halten können.

SvB 14. Okt 2008 08:13

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
@alzaimar: Mein Laufwerk ist verknüpft, d.h. Laufwerksbuchstabe U: ist mit dem UNC Namen verküpft und ich greife nur über den Laufwerksbuchstaben zu. Firebird denkt aber trotzdem, es wäre ein Server und versucht über IP drauf zuzugreifen, das ist das Problem.

Na mal schauen, vielleicht hat ja noch jemand eine Idee.

Danke

Sharky 14. Okt 2008 08:40

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Hai Sven,

hast Du schon mal versucht den Netzwerkpfad mit SUBST zu mappen?

mschaefer 14. Okt 2008 13:45

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Das Problem liegt leider in ZEOS.
Da diese aus dem UNC-Pfad zur Datenbank den Servernamen ermitteln und nun nicht mehr den lokalen Rechner anfunken sondern direkt den Rechner auf dem die Datenbank im Netz liegt. Mit Fib geht es. Leider hilft da der Subst-Trick auch nicht.

Grüße // Martin

SvB 14. Okt 2008 15:16

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Hai, mit subst habe ich es auch schon probiert und wie mschaefer berichtet, funktioniert dieser Trick auch nicht.

Das Problem scheint aber nicht nur an ZEOS zu liegen, denn wenn ich ZConnection.Properties.Add('CreateNewDatabase=.... . einbaue, dann soll mir ja, bevor irgendeine Datenbank geöffnet wird, erst mal eine angelegt werden. Es wird dann intern isc_dsql_execute_immediate mit dem SQL CREATE DATABASE aufgerufen, ohne dass irgendetwas umgewandelt wird. Die eigenschaft HostName ist leer und wird dementsprechend nicht benutzt. Firebird intern muss das irgendwie umwandelt, bzw. meint dann es wäre eine Serververbindung.
Vielleicht macht Fib da irgendetwas, damit das dann trotzdem geht.

Ich habe auch noch mal unterhttp://www.yahoogroups.com/messages/firebird-support etliches durchgeschaut mit dem selbe Problem und dort wird immer wieder gesagt, dass es nicht geht. Ich denke mal, dann werde ich das so hinnehmen und halt während der Entwicklung mir irgendwo lokal die Datenbank anlegen. Da es später sowieso lokal läuft kann ich damit sehr wahrscheinlich gut leben.

Trotzdem schade. Ich habe auch schon etwas mit SQLite gespielt, da ist das kein Problem. Allerdings habe ich da keinen Zugriffsschutz, weswegen ich zu Firebird kam.

Trotzdem Danke, mal schauen wie ich weiterkomme.

Grüße Sven

mschaefer 14. Okt 2008 15:54

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Fairerweise muß man sagen das bei FBEmbedded auch kein Zugriffsschutz existiert. . . .

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz