Zugriff in Formular auf aktuelle BASE-Datenquelle

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Benutzeravatar
stw
*
Beiträge: 16
Registriert: Sa, 22.12.2007 16:20
Wohnort: Veitshöchheim
Kontaktdaten:

Zugriff in Formular auf aktuelle BASE-Datenquelle

Beitrag von stw »

Hallo zusammen!

Aus meiner Datenbank rufe ich ein Formular auf. Dieses Formular soll eine neue Nummer ziehen, und zwar über eine SELECT-Anweisung. Mehrfach habe ich nun gelesen (und auch programmiert), daß eine Connection aufgebaut werden muß:

Code: Alles auswählen

Dim DatenbankKontext as Object 
Dim Datenquelle as Object
Dim Verbindung as Object

DatenbankKontext = createUnoService("com.sun.star.sdb.DatabaseContext") 
Datenquelle = DatenbankKontext.getByName("meine_datenbank")
Verbindung = Datenquelle.getConnection( "", "" )
Warum, so frage ich mich, muß ich mittels eines Datenbanknamens die Datenquelle identifizieren? Die Datenbank ist doch schon offen! Die Anweisung Datenquelle = DatenbankKontext.getByName("meine_datenbank") sollte sich doch auch anders gestalten lassen, zumal ja mehr als eine Datenbank registriert sein kann. Oder muß ich den Datenbanknamen an das Formular übergeben? Da die Datenbank ihren Namen ändern kann (Versionierung, Historisierung), möchte ich den Datenbanknamen nicht hart verdrahten.

Gibt es eine Möglichkeit, den Datenbanknamen wegzulassen bzw. durch ein anderes Objekt zu referenzieren?

Vielen Dank für die Hilfe!
Der vollständige Stillstand ist nur erreichbar durch Rennen entgegen der Erdrotation.
[Eroc]
OOo 3.1.0 mit Sun Report Builder 1.1.0 unter Windows Vista
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Zugriff in Formular auf aktuelle BASE-Datenquelle

Beitrag von Gert Seler »

Hallo stw,
vielleicht hilft Dir ja der folgende Tipp aus "Wiki_Base" :
ein Makro für "Fortlaufende RechnungsNummern" findest Du hier :
http://www.ooowiki.de/FortlaufendeRechn ... rieBase%29

vielleicht hilft Dir das Lesen der "Wiki_Base" Kategorie weiter.

Ich wünsche allen Teilnehmern "Ein gesundes und glückliches Jahr 2008" :lol: :lol: :lol: .
mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Zugriff in Formular auf aktuelle BASE-Datenquelle

Beitrag von Gert Seler »

Hallo stw,
vielleicht hilft Dir ja der folgende Tipp aus "Wiki_Base" :
ein Makro für "Fortlaufende RechnungsNummern" findest Du hier :
http://www.ooowiki.de/FortlaufendeRechn ... rieBase%29

vielleicht hilft Dir das Lesen der "Wiki_Base" Kategorie weiter.

Ich wünsche allen Teilnehmern "Ein gesundes und glückliches Jahr 2008" :lol: :lol: :lol: .
mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Benutzeravatar
stw
*
Beiträge: 16
Registriert: Sa, 22.12.2007 16:20
Wohnort: Veitshöchheim
Kontaktdaten:

Re: Zugriff in Formular auf aktuelle BASE-Datenquelle

Beitrag von stw »

Hallo Gert, danke für Deine Antwort. Sieht gut aus, leider ist die Syntax für das Makro3 falsch. Folgenden Code habe ich abgekupfert:

Code: Alles auswählen

sub TestMakro

' Datenbank und Tabelle der Registrierungsdatenbank
CONST OOoBase = "OOo_Registry"
CONST OOoTabelle = "RegBase"

' Objekte deklarieren
DIM DatabaseContext AS OBJECT
DIM Datenquelle AS OBJECT
DIM Verbindung AS OBJECT

' Datenbankkontext erzeugen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

' Datenquelle für OOo-Registry
Datenquelle = DatabaseContext.getByName(OOoBase)

end sub
Die Zeile "Datenquelle = DatabaseContext.getByName(OOoBase)" generiert einen Laufzeitfehler NoSuchElementException. Schade.

Auch ein anderes meiner Probleme ist in dem Makro behandelt. Zur Laufzeit steuere ich eine generierte Nummer zu. Das ist die letzte bekannte Nummer + 1. Den erzeugten Wert schreibe ich in das Datenfeld "MitgliedsNr":

Code: Alles auswählen

Sub FokusVerlustNachname

dim l_Next_nr as Integer
  gsInitDbConnection()
  gsInitObjFrmMitglieder()
  If goMitgliedsNr.text = "" Then
     If goNachname.text <> "" Then
        l_Next_nr = fGetNextMglNummer()
        goMitgliedsNr.text = l_Next_nr
     End If
  End If
End Sub
Beim Speichern des Datensatzes erklärt mir die Laufzeitumgebung, daß der Satz nicht gespeichert werden könne, weil das Feld leer sei: "Für das Feld 'MitgliedsNr' ist eine Eingabe erforderlich". Gehe ich mit dem Cursor in das Feld (in dem der Wert korrekt angezeigt wird!) und drücke EINGABE, dann kann der Satz gespeichert werden!

Folgenden Code habe ich aus Makro3 übernommen:

Code: Alles auswählen


DIM Textdokument AS OBJECT
DIM Textfelder AS OBJECT
DIM DatabaseContext AS OBJECT
DIM Datenquelle AS OBJECT
DIM Verbindung AS OBJECT
DIM Authentifizierung AS OBJECT
DIM SQL_Anweisung AS OBJECT
DIM Abfrageergebnis AS OBJECT

' Hilfsvariablen
DIM Benutzerfeld, Rechnungsnummer AS STRING
DIM Sql AS STRING
DIM Msg AS STRING

  Textdokument = thisComponent
  Textfelder = Textdokument.TextFieldMasters
  Textdokument.textfields.refresh()

Aber auch hier ist das Feld angeblich leer. *verzweifel*

Hast Du noch Ideen für meine Probleme?

Gruß
Stefan
Der vollständige Stillstand ist nur erreichbar durch Rennen entgegen der Erdrotation.
[Eroc]
OOo 3.1.0 mit Sun Report Builder 1.1.0 unter Windows Vista
Antworten