Kann man zu einem unregistrierten Firebird File (fdb) ohne externem Server (oder odb Datei) von Calc aus "connecten"?

Hallo,

Grundsätzlich möchte ich keine integrierte DB mehr verwenden, dazu habe ich aus einem odb File eine Firebird DB extrahiert (fbk) und umgewandelt (fdb).

Diese kann ich mit Hilfe eines installierten Servers schon mal “ansprechen”. Nun soll diese Datei später auf einem anderen Rechner mit LO genutzt werden. Dort soll aber kein Firebird-Server installiert werden! Außerdem möchte ich ungern für beliebig andere *.fdb Files jedes Mal eine eigene *.odb Datei anlegen müssen, um die DB zu registrieren (was zwar geht, aber hier nicht gewollt ist).

Diesen ganzen Ansatz habe ich schon mit einer H2Database hinbekommen (allerdings mithilfe eines Java-JBDC Treibers!) und würde dies gerne auf Firebird übertragen.

Gibt es einen Connection-String, der mir dies ermöglicht?

Vielen Dank für jegliche Antwort.

Ralf

Note 1: Dachte schon daran, eine einzige ODB Datei anzulegen und in der content.xml den Eintrag für xlink:href jeweils zu überschreiben. Aber das geht doch bestimmt smarter, oder nicht?

Note 2: Das muß doch gehen, da LO ja auch auf eine interne fdb Datei zugreift (die dann allerdings per temp ausgelagert wird)

Anhang 1:

Private Sub Test_FireBird_4()

  Dim sConnStr1$, sConnStr2$, oDBContext, oCon
  Dim oProps(1) As New com.sun.star.beans.PropertyValue

  Const FDB_FILE$ = "D:\test.fdb"

  oProps(0).name  = "user"
  oProps(0).value = "SYSDBA"
  oProps(1).name  = "­password"
  oProps(1).value = "masterkey"

  sConnStr1 = "sdbc:firebird:file://"           & FDB_FILE
  sConnStr2 = "sdbc:embedded:firebird:file://"  & FDB_FILE

  On Error GoTo ERR
  oDBContext = createUnoService("com.sun.star.comp.sdbc.firebird.Driver")

  oCon = oDBContext.connect(sConnStr1, oProps())

  If NOT IsNull(oCon) Then
    xray oCon

    oCon.Close
    oCon.Dispose 
  Else
    MsgBox "Not Connect"
  End If

  Exit Sub

ERR:

  MsgBox Error, MB_ICONSTOP, "Test_FireBird_4"

End Sub

Anhang 2:

Bildbeschreibung

Du kannst doch einfach direkt über den Dialog beim Erstellen einer Datenbankdatei mit einer Firebird-Datei verbinden.

Wenn Du so etwas unbedingt mittels eines Makros erzeugen willst, dann musst Du eine vollwertige URL erstellen. Das sieht bei mir z.B. so auch:

<db:connection-resource xlink:href="sdbc:firebird:file:///home/user/Dokumente/LibreOffice/Firebird/example_FB3.fdb" xlink:type="simple"/>

In Deinem Makro wandelst Du das Ganze nicht in so einen vollwertigen String mit ConvertToUrl um. Da steht einfach ein Windowspfad mit Backslashes und das funktioniert dann natürlich nicht.

Diesen String kannst Du auch über Bearbeiten → Datenbank → Eigenschaften direkt eingeben - ohne irgendwelche Makros.

Per Makro kommst Du an diesen String über

thisComponent.URL

Das wird aber nach xray schreibgeschützt sein.
Vermutlich ist es dann eher etwas weiter drinnen:

thisComponent.CurrentColtroller.DataSource.URL

Das sieht dann nämlich komplett auch so aus wie in der content.xml:

sdbc:firebird:file:///home/user/Dokumente/LibreOffice/Firebird/example_FB3.fdb

Hallo Robert,

Danke für Deine Antwort.

Hm, vielleicht habe ich mich nicht deutlich genug ausgedrückt :frowning:

  • Zuerst habe ich eine integrierte Firebird Datei aus dem entsprechendem odb File ausgelagert ( odb => fdk => fdb ).
  • Nun möchte ich z.B aus Calc heraus auf die Daten in der fdb-Datei zugreifen (dies jedoch ohne Firebird-Server oder odb Datei).

Da Base unter LO ja in der Lage ist (vermutlich mit einem integrierten embedded-System) eine eingelagerte Firebird-DB auszulagern und anzusprechen, möchte ich gerne
diesen Mechanismus benutzen, um eine schon ausgelagerte DB anzusprechen.

Folge ich da einem falschen Gedanken oder ist mein Ansatz mit

oDBContext = createUnoService("com.sun.star.comp.sdbc.firebird.Driver")
oCon = oDBContext.connect("sdbc:firebird:file://D:/test.fdb", oProps())

grundsätzlich falsch?

Ich sehe die Überschrift zu diesem Thread. Da steht etwas von Calc und ohne *.odb-Datei drin. Das funktioniert meines Wissens nicht. Selbst wenn Du mit einer Calc-Datei als Grundlage einen Serienbrief im Writer erstellen willst, dann wird im Hintergrund eine *.odb-Datei erstellt.

Hm, das habe ich schon fast befürchtet :frowning:

War wohl zu euphorisch, da es mir mit einem “org.h2.Driver” mittels jdbc gelang. Bin Einsteiger was DB’s angeht. Vielleicht gehe ich da mehr in Richtung H2. Mein Problem sind nur die ganzen Daten, die in einer fdb schon angelegt sind. Mal schauen. Auf jeden Fall danke ich Dir und wünsch noch einen schönen Sonntagnachmittag.

Ralf

Kannst Du einmal schreiben, was Du mit diesem Treiber gemacht hast, wie Du den eingebunden hast usw. Denn auch den JDBC-Treiber, den Du da erwähnst, musst Du ja irgendwie ansprechen können. Und für so etwas hat eben LO Base. Das regelt die Verbindungen zu Datenbanken.

Daten aus einer Datenbankdatei nach Calc rüber zu transportieren dürfte doch kein Problem sein, oder? Die würde ich aus dem Datenquellenbrowser direkt in das Tabellenblatt ziehen.

Dem angegebenen Testtext vom 26.6. fehlt übrigens ein weiterer Frontslash file:///

Hallo Robert,

das werde ich gerne machen (sobald ich Zeit habe - morgen denke ich).

Bin immer noch dabei, mir mehr Einblick in “relationale Datenbanken” im Allgemeinen und SQL, Firebird, H2, MySQLim Besonderen zu verschaffen. Alles noch recht trocken und für mich als Einsteiger teilweise unverständlich - aber da bin ich optimistisch - das wird schon noch besser :slight_smile:

Leider habe ich noch keine gute Beschreibung des ganzen Themas gefunden. Alles nur zusammengewürfelt. Muss mich da eben noch durchwühlen. Da das meiste eh in Englisch ist, macht es das auch nicht leichter, lach.

Egal, ich schreibe Dir morgen, was ich genau womit versucht habe.

Ralf

Leider habe ich noch keine gute Beschreibung des ganzen Themas gefunden.

ist nicht so schwer:

Handbücher

Die Handbücher passen da leider nicht. Es geht um eine Datenbankverbindung ohne die Zuhilfenahme von Base.