Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird embedded vs. Server (https://www.delphipraxis.net/167953-firebird-embedded-vs-server.html)

user0815 27. Apr 2012 07:23

Datenbank: Firebird • Version: 2.0.7 • Zugriff über: UniDAC

Firebird embedded vs. Server
 
Hallo,

ich habe hier eine EXE mit TInterbaseUniProvider sowie einer TUniConnection.
Die Connection zur DB baue ich wie folgt auf.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  UniConnection.Server := 'localhost';
  UniConnection.Database := ExtractFilePath(ParamStr(0)) + 'employee.fdb';
  UniConnection.Connected := true;

  if not UniConnection.Connected then exit;

  UniQuery1.Active := UniConnection.Connected;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  UniConnection.Server := '';
  UniConnection.Database := ExtractFilePath(ParamStr(0)) + 'employee.fdb';
  UniConnection.Connected := true;

  if not UniConnection.Connected then exit;

  UniQuery1.Active := UniConnection.Connected;
end;
Im (Debug) EXE Verzeichnis liegen die folgenden Dateien: employee.fdb, fbclient.dll, firebird.conf, firebird.msg, FirebirdTest.exe, ib_util.dll, icudt30.dll, icuin30.dll, icuuc30.dll, Microsoft.VC80.CRT.manifest, msvcp80.dll, msvcr80.dll

Lokal habe ich hier auf dem Win7 Rechner den Firebird Server als Dienst laufen. Drücke ich auf Button1 so werden mir die Daten einer Tabelle angezeigt.
Drücke ich auf Button2 so erhalte ich die nachfolgende E:Exception Meldung: unavailable database

Kopiere ich alle Daten aus diesem Verzeichnis & starte die EXE auf einem anderen PC (wo kein Firebird Server läuft) so werden mir die Daten bei Button2 Click angezeigt.

Ich dachte man kann auf einem Rechner sowohl die Server als auch die Embedded Version ausführen.
Was mache ich falsch ?

RWarnecke 27. Apr 2012 07:33

AW: Firebird embedded vs. Server
 
Wenn ich es noch richtig weiß, wird glaube ich primär auf den Server zugegriffen, wenn dieser gestartet ist oder als Dienst läuft.

mkinzler 27. Apr 2012 08:02

AW: Firebird embedded vs. Server
 
Beim embedded (Server) Client wird beim Zugriff über lokales Protokoll anstatt auf den Server direkt auf die Datenbankdatei zugegriffen. Beim Zugriff über Netzwerkprotokoll ( Server=loclahost) wird auf den Server(dienst) zugegriffen. Da der embedded Client von Firebird < 2.5 auf der SuperServer-Architektur basiert, wird exklusiver Zugriff auf die datenbankdatei benötigt. Das aber der Server schon darauf zugreift wird das nicht möglich sein. Ab Firebird 2.5 wird die SuperClassic Architektur verwendet, hier geht der parallele Zugriff.

user0815 27. Apr 2012 09:17

AW: Firebird embedded vs. Server
 
Danke für die Antworten.

Anscheinend muss der Dienst nur vorhanden sein.
"Button2Click" funktioniert auch nicht wenn ich den Dienst manuell beende oder deaktiviere.

mkinzler 27. Apr 2012 11:18

AW: Firebird embedded vs. Server
 
Komsich. Was für ein Fehler wird genau angezeigt/geloggt?

user0815 27. Apr 2012 11:31

AW: Firebird embedded vs. Server
 
Wenn ich den Dienst beende dann erhalte ich jeweils die nachfolgenden E:Exception Meldung:

Button2Click:
"unavailable database"

anschließend Button1Click (ist ja auch logisch ohne Dienst):
Unable to complete network request to host "@1".
Failed to establish a connection.
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.

mkinzler 27. Apr 2012 11:33

AW: Firebird embedded vs. Server
 
Un in der Logdatei?

Lemmy 27. Apr 2012 12:05

AW: Firebird embedded vs. Server
 
HI,

was für ne fbClient.dll wird denn verwendet? die Client.DLL vom Server oder eine umbenannte fbembedded.dll?

Grüße

user0815 27. Apr 2012 12:25

AW: Firebird embedded vs. Server
 
LOG: Anwendung gestartet + getestet, dann Dienst beendet und Anwendung nochmal gestartet + getestet.

Code:

XXXXX (Client)   Fri Apr 27 13:12:02 2012
   Guardian starting: "J:\Program Files (x86)\Firebird\bin\fbserver.exe"

XXXXX (Client)   Fri Apr 27 13:12:58 2012
   "J:\Program Files (x86)\Firebird\bin\fbserver.exe": normal shutdown

XXXXX (Client)   Fri Apr 27 13:13:12 2012
   INET/inet_error: connect errno = 10061

XXXXX (Client)   Fri Apr 27 13:13:15 2012
   INET/inet_error: connect errno = 10061
Ist eine umbenannte fbembed.dll zu fbclient.dll (Dateiversion: 2.5.1.26351 aus 32-bit Embedded)
Sollte doch keine Probleme trotz Win7 64bit geben

mkinzler 27. Apr 2012 12:29

AW: Firebird embedded vs. Server
 
Es wird ein Netzprotokoll verwendet, dass veranlasst den Guardian, den Server zu starten.

user0815 27. Apr 2012 12:39

AW: Firebird embedded vs. Server
 
ne, beides war beendet (im obigen LOG), habe dann FirebirdServerDefaultInstance + FirebirdGuardianDefaultInstance manuell gestartet.
Anwendung getestet, Netzwerk OK, Embedded nicht OK.

Beide Dienste beendet, erneuter Test, Fehlermeldungen wie siehe oben.
Im Log hätte ich den ersten Eintrag entfernen müssen.

Lemmy 27. Apr 2012 12:40

AW: Firebird embedded vs. Server
 
Hi,

dann schau mal ob in UniConnection irgend wo noch ein Protokol einstellbar ist. Beim Embedded muss das auf local stehen.

Grüße

mkinzler 27. Apr 2012 12:41

AW: Firebird embedded vs. Server
 
Auch dort wird aber versucht per IP (Netzprotokoll) zuzugreifen.

Zitat:

INET/inet_error: connect errno = 10061

user0815 27. Apr 2012 13:17

AW: Firebird embedded vs. Server
 
Bei embedded muss es UniConnection.Server := ''; sein, dann funktioniert es auf einem anderen Win7 PC ohne Firebird Server Installation.

Zitat:

Auch dort wird aber versucht per IP (Netzprotokoll) zuzugreifen.
Wenn ich die embedded auf meinem Rechner teste (Firebird Server vorhanden) wird nichts in das LOG geschrieben.
Der Doppelte LOG Eintrag (im Abstand 3 sec reproduzierbar) entsteht wenn ich den Server Dienst beende & versuche per UniConnection.Server := 'localhost'; zuzugreifen.

RWarnecke 27. Apr 2012 13:43

AW: Firebird embedded vs. Server
 
Zitat:

Zitat von user0815 (Beitrag 1163851)
Bei embedded muss es UniConnection.Server := ''; sein, dann funktioniert es auf einem anderen Win7 PC ohne Firebird Server Installation.

Die Aussage kann ich nicht so stehen lassen. Ich habe mir angewöhnt, dass ich bei der Eigenschaft Server immer etwas reinschreibe. Wenn ich die Embedded-Version benutze, schreibe ich localhost rein, wenn ich die Server-Version nutze dann schreibe ich entweder die Serveradresse im Netzwerk rein oder auch localhost, wenn der Server lokal auf dem Entwicklungsrechner mit der Delphi IDE läuft.

user0815 27. Apr 2012 13:47

AW: Firebird embedded vs. Server
 
Es funktioniert.

Aus der README_embedded:

Zitat:

Then rename fbembed.dll to either fbclient.dll or
gds32.dll depending on your database connectivity software.
Habe jetzt statt der fbclient.dll mal die gds32.dll genommen (umbenannt).
Der Win7 Rechner auf dem das mit der fbclient.dll lief ist ein 32bit, meiner ein 64bit.
k.a. ob es damit zusammenhängt.

mkinzler 27. Apr 2012 13:56

AW: Firebird embedded vs. Server
 
Zitat:

Wenn ich die Embedded-Version benutze, schreibe ich localhost rein
Dann erfolgt der Zugriff aber nicht embedded.

Die Dll muss passend zur Exe sein. (32Bit/64Bit). Vermutlich wurde aber eine andere fbclient.dll verwendest (syswow64), welche nicht embedded war.

user0815 27. Apr 2012 14:02

AW: Firebird embedded vs. Server
 
@RWarnecke: nutze ich für die Embedded-Version 'localhost' dann erhalte ich die folgende Fehlermeldung:

Zitat:

"Unable to complete network request to host "localhost".
Failed to establish a connection."

user0815 2. Mai 2012 06:47

AW: Firebird embedded vs. Server
 
Zitat:

Vermutlich wurde aber eine andere fbclient.dll verwendest (syswow64), welche nicht embedded war.
@mkinzler: stimmt, habe in dem (syswow64) Ordner eine "gds32.dll" gefunden & gelöscht. Jetzt funktioniert es lokal mit "gds32.dll" oder auch "fbclient.dll".


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.

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