Announcement

Collapse
No announcement yet.

Variabler Zugriff mittels ODBC

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variabler Zugriff mittels ODBC

    Ich entwickle mit Lazarus eine CS-Anwendung auf Firebird. Klappt alles prima, Client-Zugriff auf meiner Test-DB mittels Standard-Lazarus-TODBCConnection super flink und stabil.

    Im Produktionseinsatz soll es aber so sein, dass mit Doppelklick auf die Firebird-Datenbankdatei (die dann noch irgendeine andere Extension bekommen wird) die Anwendung mit eben genau jener projektspezifischen DB-Datei gestartet werden soll. Dabei soll es unerheblich sein, ob das auf einem lokalen PC oder auf einem gemappten Serverlaufwerk geschieht. Auf dem Server läuft für eine andere Anwendung schon eine Firebird-Instanz, auf den Clients (also für den lokalen Betrieb) wird der Firebird dann ebenfalls installiert werden. Soweit alles klar.

    Wie müssen die Änderungen an der ODBCConnection1 aussehen, damit mein Vorhaben gelingt? Ich habe es schon mit der Manipulation der DSN-Datei (beim FormCreate mittels StrParam(1)...) versucht, aber so scheint es nicht zu gehen. Hat jemand schon mal so etwas ähnliches realisiert und kann mir konkrete Hinweise geben?

    (Bitte keine Erziehungshinweise zur Google-Bedienung! Ich habe vor dieser Fragestellung selbstverständlich gegoogelt...
    Und bitte auch keine Spekulationen, sondern funktionierende Erfahrungen...)

  • #2
    Auf dem jeweiligen Rechner auf dem die Datei angeklickt und die Anwendung gestartet werden sollte ein Handler für die Extension in die Registry eintragen werden
    für die Extension XYZ z.B.

    [HKEY_CLASSES_ROOT\.XYZ\shell\open\command]
    @="MyLovelyPath\\MyLovelyApplication.exe \"%1\""

    in der Anwendung dann das erste Argument auslesen und an passender Stelle in den ConnectionString einfügen.
    Ich nehmen gerade an du benutzt Embedded Firebird. Sollte doch tatsächlich CS gemeint sein und ein Server dahinterstecken kenne ich den zu wenig.
    Ganz allgemein hätte ich aber Bauchschmerzen wenn das ginge und irgendein beliebiger Client mir als Server eine Datenbank unterjubeln könnte.

    Comment


    • #3
      Wenn es nicht Firebird embedded ist, funktioniert Dein Plan m.E. so nicht.
      Die ODBC Verbindungsangabe mit Pfad zur DB Datei, läuft an dem Server vorbei. Oder anders: Nur weil ich da eine fdb Datei im ODBC Treiber eintrage, weiß der Remote Server nichts davon. Dieses Verfahren dürfte nur im embedded Betrieb funktionieren (meinst Du das doch zufällig?) oder wenn der Server selbst auch die DB Datei betreibt *.
      Für den Serverbetrieb dürfte sich eher eine ODBC Konfiguration mit server und db alias anbieten. Auch wenn der Server lokal betrieben wird.

      *Noch eine Sache ist da schräg. Du sprichst von einem Netzlaufwerk. Explizit einen Server zu betreiben, die Datei aber auf einem Netzlaufwerk zu hosten ist Verschwendung und ggF. auch im Betrieb unsicher. Wenn ein eigener Server läuft, sollte der seine Datenbankdateien lokal halten und die Clients müssen und brauchen über deren Lage gar nichts zu wissen, geschweige Zugriffsrechte darauf zu haben, Zugriff erfolgt dann über Servername:Alias.
      Hab ich übrigens alles so noch nicht betrieben, ich nutze kein ODBC und Firebird nur zum Spielen lokal. Insofern bitte ich um Verzeihung, nicht Deinen Antwort-Vorgaben zu folgen.
      Gruß, defo

      Comment


      • #4
        Ich danke erst noch mal allen die sich hier netter Weise beteiligt haben.
        Ich habe das Problem gelöst. Zugriff via ODBC und dabei FileDSN. Der Eintrag
        DbName=
        im DSN-File wird im FormCreate jeweils angepasst. Der erste Ansatz war also schon nicht ganz falsch, nur habe ich mich dabei etwas zu dämlich angestellt. Die richtige Syntax würde lauten:
        <server>:/<share>/<verzeichnis>/<dbname>
        Sieht simpel aus, ist simpel, man muss es nur genau so schreiben, dann ist es total easy...

        Im Übrigen habe ich keine Ahnung, ob die DB in diesem Falle tatsächlich auf dem Server läuft; immerhin läuft die DB-Anbindung über ODBC-Client. Einen Alias braucht man nicht. Allerdings funktioniert es nicht, wenn der Firebird auf dem Linux-Server nicht läuft.

        Comment


        • #5
          Wenn du Lazarus und Firebird verwendest? Wieso noch den Umweg über ODBC und nicht die eingebauten Mittel von Lazarus verwenden?

          Comment

          Working...
          X