Mit Datenbank verknüpfte Felder werden nicht aktualisiert

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Surface
Beiträge: 5
Registriert: Do, 10.05.2007 16:33

Mit Datenbank verknüpfte Felder werden nicht aktualisiert

Beitrag von Surface »

Hallo zusammen!

Ich habe folgendes Problem im Writer (OO 2.2):

Ich habe in einem Dokument Feldbefehle eingefügt, die auf diverse Spalten in einer OO Datenbank verweisen.
Leider bekomme ich die im Writer aber nicht aktualisiert, egal ob ich F9 drücke oder den manuellen Weg über Extras => Aktualisieren => Felder gehe, es passiert einfach nichts. :(
Woran kann das liegen?

Der einzige Weg der möglich ist: Mit F4 den Datenbankbrowser zu öffnen, die Zeile (tatsächlich enthält die Datenbank nur eine Zeile) links mit Mausklick zu markieren und dann mit "Daten in Felder" zu übernehmen.

Das ist zum einen aber ziemlich umständlich und lässt sich zum anderen auch nicht als Makro aufzeichnen, zumindest ist es mir nicht gelungen. :oops:

Für jede Hilfe dankbar!

Gruß,
Thorsten
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Beitrag von Eddy »

Hallo Surface,

das ist so normal. Mit "Aktualisieren" wird die Datenbank, also deren Inhalt , aktualisiert. Wenn Deine Datenbank nur eine Zeile enthält, warum schreibst Du die Werte nicht direkt in Dein Dokument?

Mit aktuellen Grüßen

Eddy
Surface
Beiträge: 5
Registriert: Do, 10.05.2007 16:33

Beitrag von Surface »

Hallo Eddy!
Eddy hat geschrieben:das ist so normal. Mit "Aktualisieren" wird die Datenbank, also deren Inhalt , aktualisiert.
Das ist schlecht, da ich eine einfache Möglichkeit suche, die Daten in den Writer zu bekommen. Der Inhalt der Datenbank ändert sich während des Zugriffs unter OO auch nicht.
Wenn Deine Datenbank nur eine Zeile enthält, warum schreibst Du die Werte nicht direkt in Dein Dokument?
Weil sich deren Inhalt häufig ändert. Die .odb funktioniert als Mittler zwischen einem älteren DOS-Programm, das einzelne Kundendaten exportieren kann.
Im Writer sollen dann bspw. für Standardbriefe Namen, Adressen, Briefanrede, etc ausgelesen und übernommen werden.

Gruß,
Thorsten
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Beitrag von Eddy »

Hallo Surface,

Du kannst ein Makro aufzeichnen / schreiben mit dem Du den Datenbankbrowser öffnest usw. Dieses Makro kann dann auf eine Tastenkombination gelegt werden. Dazu wurde hier im Forum schon einiges geschrieben.

Die Aktualisierung der Datenbank sollte funktionieren, wenn unter Extras > Optionen > OpenOffice.org Base > Verbindungen die Funktion Verbindungen aufbewahren abgewählt ist. Auch hierzu ist im Forum schon einiges geschrieben worden. Leider scheint das noch nicht (immer?) zu zu klappen.

Mit aktualisierten Grüßen

Eddy
Surface
Beiträge: 5
Registriert: Do, 10.05.2007 16:33

Beitrag von Surface »

Hallo Eddy,
Eddy hat geschrieben:Du kannst ein Makro aufzeichnen / schreiben mit dem Du den Datenbankbrowser öffnest usw. Dieses Makro kann dann auf eine Tastenkombination gelegt werden. Dazu wurde hier im Forum schon einiges geschrieben.
Das ist ja das womit ich mich jetzt schon drei Tage rumschlage. Ich bin in Sachen Basic-Programmierung noch der absolute Laie und die Hilfestellung die mir OO bietet ist leider auch nicht so dolle.
Unter Word habe ich Makros einfach aufgezeichnet, mir danach den Code angesehen und entsprechend angepasst.
In OO klappt das leider überhaupt nicht! Wenn ich hier bspw. die nötigen Schritte aufzeichne (F4 => Datenbank wählen => Zeile markieren => Daten in Felder =>F4), dann speichert OO im Makro nur einen Bruchteil davon. Im Beispiel wird dann nur Datenbrowser an/ Datenbrowser aus gespeichert, alles was zwischen F4 /F4 passiert leider nicht, so dass ich mich auch nicht am Code langhangeln kann.

Ich verstehe ehrlich gesagt auch nicht, warum sowas simples wie "Daten in Felder" in OO nicht einfach möglich ist. Alle Informationen, welche Datenbank und welche Spalte verwendet werden soll, stecken ja schon in den Feldbefehlen die mit <Strg>F9 auch einzusehen sind.
Über Umwege ist das Gewünschte auch schnell erreicht:
Ich öffne das Dokument mit den Feldzeichen, rufe den Seriendruckmanager auf, wähle sofort Schritt 6 => Abbrechen =>=> schon ist das Dokument mit den Daten gefüllt.
Ich kann das aber auch nicht automatisieren, da die Schritte wiederum in "Makro aufzeichnen" nicht gespeichert werden und ich deshalb auch nicht sehen kann, was da intern abläuft. :?
Die Aktualisierung der Datenbank sollte funktionieren, wenn unter Extras > Optionen > OpenOffice.org Base > Verbindungen die Funktion Verbindungen aufbewahren abgewählt ist.
Vielleicht hast Du mich falsch verstanden, ich muss die Daten in der Datenbank nicht aktualisieren, da sie sich während des Zugriffs von Writer nicht ändern. Bei mir ist auch aufbewahren nicht angehakt (ist wohl die Standardeinstellung).

Gruß,
Thorsten
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Beitrag von Eddy »

Hallo Surface,

der Basic-Kenner bin ich auch nicht. Dafür gibt es in diesem Forum eine extra Rubrik.
Alle Informationen, welche Datenbank und welche Spalte verwendet werden soll, stecken ja schon in den Feldbefehlen die mit <Strg>F9 auch einzusehen sind.
In den Feldbefehlen steht nicht, welcher Datensatz eingefügt werden soll. Bei den meisten Anwendern sind mehrere Datensätze vorhanden.
Über Umwege ist das Gewünschte auch schnell erreicht:
Ich öffne das Dokument mit den Feldzeichen, rufe den Seriendruckmanager auf, wähle sofort Schritt 6 => Abbrechen =>=> schon ist das Dokument mit den Daten gefüllt.
Der schnellste Weg ist, mit F4 Datenbank öffnen, Datensatz markieren und danach das Symbol "Daten in Felder" (4. von rechts) anklicken und normal ausdrucken. Wenn Du statt F4 das Icon Datenquellen mit der Maus klickst, sind es 5 Klicks und das Dokument wird gedruckt.

Mit eingefügten Grüßen

Eddy
Surface
Beiträge: 5
Registriert: Do, 10.05.2007 16:33

Beitrag von Surface »

Hallo Eddy,
Eddy hat geschrieben:der Basic-Kenner bin ich auch nicht. Dafür gibt es in diesem Forum eine extra Rubrik.
das ist mir bewusst, ich dachte nur anfänglich, dass das ohne Makros zu bewerkstelligen ist.
Sollte das ein Moderator lesen, wäre ich dankbar, wenn sie/er den Thread in "OO Basic und Java" verschieben könnte!
In den Feldbefehlen steht nicht, welcher Datensatz eingefügt werden soll. Bei den meisten Anwendern sind mehrere Datensätze vorhanden.
Das ist richtig, es würde aber auch nicht stören, wenn man mehrere auf dem Bildschirm hätte, sofern mehr als einer vorhanden ist. :wink:
Der schnellste Weg ist, mit F4 Datenbank öffnen, Datensatz markieren und danach das Symbol "Daten in Felder" (4. von rechts) anklicken und normal ausdrucken. Wenn Du statt F4 das Icon Datenquellen mit der Maus klickst, sind es 5 Klicks und das Dokument wird gedruckt.
Das hatte ich oben ja genau so geschrieben und sollte nur zeigen, dass es auch andere Wege gibt, um zum Ziel zu kommen. In dem Fall unter Umgehung des Datenbankbrowsers.
Das nützt mir allerdings nichts, so lange ich das nicht automatisiert ablaufen lassen kann. Der Anwender soll halt beim Schreiben eines Briefes erstmal sehen, an wen er da überhaupt schreibt, sprich, ob auch der richtige Datensatz aus dem DOS-Programm exportiert wurde.
Wenn er erstmal nur Platzhalter sieht ist das leider nicht so hilfreich.

Gruß,
Thorsten
Surface
Beiträge: 5
Registriert: Do, 10.05.2007 16:33

Beitrag von Surface »

Erstmal danke Toxitom fürs Verschieben! :)

Also das ganze in Basic.
Was ich bisher gemacht habe, mich mit der Datenbank verbinden:

Code: Alles auswählen

Function Test
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
if DatabaseContext.hasByName("Eddy_dat")=true then
DataSource = DatabaseContext.getByName("Eddy_dat")
Connection = DataSource.GetConnection("","")
else
Print "Die Datenbank existiert nicht"
end if
End function
Wie greife ich jetzt aber auf die erste Zeile der ersten Tabelle zu?
Unter der Datenbank habe ich ja "Abfragen" und "Tabellen", unter letzterer bspw. Tabelle1 die verwendet werden soll.

Weiß jemand, was intern abläuft, wenn "Daten in Felder" gewählt ist?
Ich hab leider keine Ahnung und mit dem Makrorecorder wird wie oben beschrieben leider auch nichts aufgezeichnet...

Falls das nicht bekannt ist, hat jemand vielleicht eine engl. Version und kann mir sagen, wie die engl. Beschreibung des Icons lautet?
Dann kann ich auf anderen Seiten auch noch suchen.
Ich meine dieses Bild, das nur im Datenbankbrowser zu sehen ist.

Gruß,
Thorsten
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Thorsten,

also, wenn du es mit Basic versuchst, dann musst du leider alles programmieren. Der Rekorder hilft hier nicht mehr, die Tasten im Explorer auch nicht :-(

Das, was dein Code hergibt, ist eine aktive Datenbank-Verbindung. Jetzt kannst du ganz "normal" auf deine Datenbank zugreifen - eben mit SQL. Das heist, du musst jetzt eine Abfrage erzeugen, um an Daten heranzukommen. Diese Abfrage (die Ergebnisse) werden in einem Result-Set gespeichert, jetzt hast du die Daten als Objekt im Speicher und kannst nun selektiv auf einzelen Daten zugreifen.

Über diese Wege findest du jede Menge Infos im Base-Forum, aber auch hier im Basic Teil.

Das Prinzip wäre wie folgt:
Nach deinem "end if":

Code: Alles auswählen

oStatement = Connection.createStatement()
sSQL = "SELECT * FROM ""Tabelle1"", ""Tabelle1"""
oErgSet = oStatement.executeQuery(sSQL)
Dein Resultset (oErgSet) beinhaltet nun alle Daten der Tabelle mit Namen "Tabele1". Die Tabelle hat diverse Spalten (Datenfelder) und diverse Datensätze (Zeilen).
Der Zellzeiger steht auf der ersten Zeile, den Inhalt der ersten Spalte erhälst du nun also mit :

Code: Alles auswählen

msgbox oErgSet.getString(1)
Na ja, und den Rest musst du eben noch programmieren :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten