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-Connectionstring mit UNC Pfad (https://www.delphipraxis.net/164492-firebird-connectionstring-mit-unc-pfad.html)

Lemmy 15. Nov 2011 15:11

Datenbank: Firebird • Version: 2.1 • Zugriff über: -

Firebird-Connectionstring mit UNC Pfad
 
Hi,

folgende Situation:

FB Server auf einem Server, Zugriff über Clients. Jetzt muss ich in die Server-DB Daten importieren, die lokal in einer anderen Firebird DB vorliegen.

Meine Idee: Ich geb ein bel. Verzeichnis auf dem Server frei, gebe die Freigabe dem Client bekannt. Der kann dann da die Datenbank rein schieben und einen Connection-String zusammenstellen.

Leider klappt das nicht so wie ich es mir vorstelle:

Connectionstring: server:c:\programme\MeinProgramm\db\Daten.fdb
Freigabe: \\server\ImportDB

der Connectionstring server:\\Server\ImportDB\datenbank.fdb führt aber bei isql, FlameRobin usw. zu Fehlern:

unavailable Database

Der Zugriff vom Client auf die Freigabe funktioniert, der Zugriff vom Client auf die Datenbank funktioniert. Wenn ich anstelle des Freigabenamens den lokalen Serverpfad nehme, funktioniert auch der Zugriff auf die ImportDB (was ich aber vermeiden will).

Hat jemand eine IDee was ich machen könnte?

Grüße


//Nachtrag:
Eine option wäre sicherlich neben der Bekanntgabe der lokalen Pfadangabe des Servers, eine weitere die Installation des Embeddedserver auf den Clients

exilant 15. Nov 2011 16:00

AW: Firebird-Connectionstring mit UNC Pfad
 
Ich habe zwar nicht wirklich verstanden was du machen willst, aber eines ist klar: Der Pfad im Connectionstring muss immer aus Sicht der Firebird servers auf die Datenbank zeigen. Und Firebird unterstützt keine Datenbanken auf Freigaben. Daher kann es immer nur ein lokaler Pdfad sein (oder ein alias ->aliases.conf).

DelphiBandit 15. Nov 2011 16:19

AW: Firebird-Connectionstring mit UNC Pfad
 
Wie exilant schon geschrieben hat - Zugriff auf eine DB, welche auf einer Netzwerkfreigabe liegt mit den Clients geht nicht.

Ad hoc würde mir einfallen, die DB auf der Client-Festplatte zu bauen und diese anschliessend als File-Kopie in die Freigabe zu kopieren. Und den Server das dann irgendwann verarbeiten lassen. Wenn's sauber laufen soll noch ne Steuerdatei parallel schreiben, solange die existiert eben nicht verarbeiten.

Oder eben die Connection tatsächlich vom Client auf den Firebird-Installation des Servers zugreifen lassen.

mkinzler 15. Nov 2011 16:43

AW: Firebird-Connectionstring mit UNC Pfad
 
Man könnte auch versuchen einen Alias anzulegen, über den der Client sich dann verbindet. So sieht der Server den eigentlichen Pfad aus serversicht nicht.

Lemmy 15. Nov 2011 18:11

AW: Firebird-Connectionstring mit UNC Pfad
 
Hi,

ok, dann versuche ich das mal über einen Alias.

Und im Grunde liegt die DB aus sicht des Servers schon lokal - ich gebe aber halt einen UNC-Pfad an, der auf eine lokale Freigabe zeigt.

und lokal auf dem CLient zusammenbauen/zugreifen geht halt auch nur, wenn ich lokal den embedded zur Verfügung habe, d.h. anstelle der CLient.dll den embedded mit ausliefere. Dann müsste ich das Pfad-Gewürge nicht machen. Wäre mir lieber, bekomme ich aber erst dann durch, wenn definitiv nix anderes geht...

Grüße

tsteinmaurer 15. Nov 2011 23:38

AW: Firebird-Connectionstring mit UNC Pfad
 
Weg mit Freigaben auf Verzeichnissen in denen sich Datenbankdateien befinden. Wenn jemand lustig ist, macht er/sie sich eine Kopie der Datenbankdatei bei aktiven Verbindungen mit einem möglichen Ergebnis, dass die Kopie und/oder das Original beschädigt wird.

Am besten ist, der Client verbindet sich, wie bereits erwähnt, über einen Alias. Da kannst dann die Steuerung, welche DB gerade über einen Alias zugänglich ist, zentral über die aliases.conf am Server vornehmen.

lg,
Thomas

Lemmy 16. Nov 2011 00:50

AW: Firebird-Connectionstring mit UNC Pfad
 
Hallo,

vielleicht noch zur Ergänzung:

Der Client muss Daten die in einer FirebirdDB sind und auf dem Client-Rechner liegt in die Server-DB einspielen (wenn man so will, Daten von externen, mobilen Mitarbeitern). Da auf dem Client weder Embedded noch ein Server installiert ist, muss diese DB irgend wie in den Bereich des FB-Servers kommen.

@THomas: Bitte nicht falsch verstehen.... :-) Ich stimme dir völlig zu! Ich kann und möchte hier nicht so viel schreiben - ich hoffe du kannst es akzeptieren wenn ich hier einfach schreibe, dass ich manche Dinge (auch wenn ich sie gerne ändern würde) nicht ändern kann - falls Du das nicht verstehst, bin ich gerne bereit dir die Details per PN mitzuteilen.

Meine Idee geht in Richtung embedded auf den Clients zu installieren - hat aber den Nachteil, dass bei manchen Kunden nachjustiert werden muss, da diese einen Client zum Server gemacht haben (also da drauf auch regulär arbeiten) und hier nicht per Server-Connectionstring verbunden wird (habe ich zumindest so mal gesehen) was bei einem installierten embedded FB dann eben nicht mehr geht, weil der dann die DB komplett sperrt (FB 2.1).

Eine weitere Idee war aber halt auch, ein alternatives Verzeichnis auf dem Server (eben nicht das DB Verzeichnis sondern ein leeres) frei zu geben, in das der Client dann die DB kopieren kann und um der Einfachheit halber dann eben auch per UNC-Freigabe den Connectionstring zusammen baut. Meine Ursprüngliche Idee war, hier dem Client den Connectionstring für dieses Verzeichnis per Ini-Datei bekannt zu geben, dann wäre alles kein Problem - wurde aber bisher auch abgelehnt, da hier massive Eingriffe in die Sourcen befürchtet werden (wobei der Großteil oder fast alles eh meine Bereiche tangieren würden).

Allerings habe ich inzwischen über den Alias nachgedacht - funktioniert in meinem Anwendungsfall auch nicht, da ggf. auch mal 2 unterschiedliche Clients zur selben Zeit importieren müssen - dann geht das komplett in die Hose.... Außer ich mach für jeden Client einen extra Alias Eintrag.... ich glaube ich brauche dringend Argumente für den Embedded auf den Clients ;-)

Grüße

tsteinmaurer 16. Nov 2011 08:10

AW: Firebird-Connectionstring mit UNC Pfad
 
Wie kann am Client mit einer Firebird-DB gearbeitet werden, wenn weder Embedded noch ein Server auf dem Client installiert ist?

Kommt auf die Komplexität deines Anwendungsfalls an mit zentraler Datenhaltung vs. Außendienstmitarbeitern, aber da kommt man schnell in ein bidirektionales Replikationsszenario rein.

Lemmy 16. Nov 2011 09:06

AW: Firebird-Connectionstring mit UNC Pfad
 
Guten Morgen,

Zitat:

Zitat von tsteinmaurer (Beitrag 1136415)
Wie kann am Client mit einer Firebird-DB gearbeitet werden, wenn weder Embedded noch ein Server auf dem Client installiert ist?

und genau hier kommt der UNC-Pfad in Spiel: Der Client kopiert die DB in dieses Verzeichnis, damit die DB lokal auf dem Server liegt - dann muss lediglich der ConnectionString zusammen gebaut werden - und der eben der einfachheit halber genau mit dem UNC-Pfad, denn der ist auf dem Server (obwohl die Datei ja lokal vorliegt) ja auch verfügbar....

Grüße

tsteinmaurer 16. Nov 2011 09:21

AW: Firebird-Connectionstring mit UNC Pfad
 
Ich steh am Schlauch. :-D

Der Client arbeitet mit einer eigenen Datenbank, die er nur nutzen kann, wenn er in der Firma ist, da lokal kein Embedded oder Server installiert ist. Um damit arbeiten zu können, muss die Datenbankdatei in eine Freigabe des Servers kopiert werden. Der am Server zur Verfügung stehende Firebird Server dient dann als Host für die Bearbeitung der Firebird-DB. Stimmt das?

D.h. der Außendienstmitarbeiter kann dann mit der DB überhaupt nichts anfangen, wenn er sich außerhalb der Firma befindet. Warum wird dann nicht einfach eine zentrale DB für alle Clients am Server verwendet? Sorry, aber vielleicht habe ich einfach auch etwas überlesen. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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