Abfrage in Writer die Anschrift aus Database zurück gibt

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Hallo liebes OpenOffice Forum,

Ich habe ein wie ich dachte sehr häufiges Problem zu dem ich aber nun nach 5 Stunden googeln und suchen immer noch keine Lösung gefunden habe. Falls es schon an anderer Stelle mal gelöst wurde bitte einfach ganz fix auf den Ort verweisen :) Ich danke euch schonmal im Vorraus.

Mein Ziel:

Briefvorlage für ein Unternehmen

Besonderheit:

Es soll eine simple Abfrage innerhalb der Writer Vorlage geben in die man eine ID eintragen kann. Anhand dieser ID sollen dann folgende Informationen aus der Datenbank geholt werden:

Hans Mustermann
Musterweg 13
11111 Musterstadt

Das ganze soll so benutzerfreundlich wie möglich sein.

Was ich schon geschafft habe:

Ich habe eine Datenbank in Open Base erstellt und sogar schon geschafft mein Mac Adressbuch mit Open Base zu verbinden.
Ich habe es geschafft eine Abfrage innerhalb von Base zu erstellen, wo man dann die ID einträgt und man all diese Informationen zurück kriegt.

Ich selbst kann auch schon innerhalb von Writer per F4 diese Abfrage einfügen aber das ist noch viel zu kompliziert.

Ich möchte, dass der Brief am Ende direkt richtig formatiert ist. Schön wäre es auch wenn man eine Art suchfenster hätte wo man einen Nachnamen eintippt und dann alle ergebnisse kommen und man eins auswählen kann aber das wäre nur ein I-Tüpfelchen. Ich wäre schon zufrieden mit einer einfach ID Abfrage.

Ich habe das Gefühl sehr nah dran zu sein aber das letzte Puzzlestück nicht zu finden :)
Mit Makros kenne ich mich nicht gut aus habe aber eine Ahnung, dass diese mir hier weiterhelfen würden.

Viele lieben Dank für eure Hilfe.

Liebe Grüsse

unic0rned
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von Toxitom »

Hey unic0rned,

Hmm, ist doch die Standardaufgabe des Serienbriefes.

Wenn Du mit F4 schon die Datenbank-Ansicht gefunden hast - Klasse.

Schreibe Deinen Brief und formatiere ihn wie gewünscht. Aus der Datenbank-Ansicht ziehst Du die Spaltenköpfe in Dein Dokument - und formatierst es auch entsprechend (Adresse).

In der Dartenbank-Ansicht (Tabelle) kannst Du problemlos suchen und filtern (nach Namen, ID oder was auch immer. Dann den Zeilenkopf ankliclen und den Befehlt "Texte in Felder" wählen (ist ein Icon in der Datenbankansicht) - und schon steht der gewünschte Name mit allen drum und dran im Dokument.

Natürlich kannst Du auch eine Makro programmieren und eine eigene Abfragebox - aber ob es den Aufwand lohnt? Ich bezweifel das.

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Ich wusste doch das es ganz einfach ist und mir nur das letzte Teil fehlt :):)

Vielen vielen Dank für deine tolle ausführliche Beschreibung.

Es war das Daten in Felder Icon welches mir gefehlt hat.

Hab einen schönen Dezember!

Liebe Grüße

unic0rned
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Hallo ich bin nun leider wieder am Anfang mit meiner Aufgabe.

Ich habe versucht das Mac Adressbuch zu integrieren aber open Office scheint Probleme mit der Größe zu haben. Ich habe nämlich um die 2800 Einträge in meinem Mac Adressbuch. Das bringt mein OpenOffice leider immer wieder in die Knie. Es stürzt ab beim durchschauen der Datenbank etc. Leider keine Lösung für mich.

Deswegen habe ich mich dran gemacht eine seperate calc Tabelle mit all meinen Kontakten zu erstellen. Diese habe ich auch soweit fertig und kann sie in Open Office Writer als Adressquelle angeben. Diese funktioniert sehr sehr sehr viel schneller und es gibt auch keine Probleme mehr mit Abstürzen.

Nun arbeite ich mit Menschen zusammen, die eher nicht so Technikafin sind. Deswegen möchte ich Ihnen das Leben so einfach wie möglich gestalten.

Alle Kontakte in meiner calc Liste haben eine eindeutige Nummer zugeordnet. Diese kennen die Mitarbeiter.

Nun möchte ich gerne eine Briefvorlage für das Unternehmen schreiben, in dem man an irgendeiner Stelle diese Zahl eingibt, und das Writer Programm dann anhand dieser Zahl die richtige Zeile in meiner calc tabelle findet und sich dort in den richtigen Spalten die Anschrift raussucht. Also Vorname Nachname, Straße, Hausnummer und PLZ und Stadt.

Diese eingebene Zahl soll natürlich nicht gedruckt werden.

Wie gehe ich dieses Problem am besten an? Kann man so etwas über Makros lösen oder bin ich da komplett auf dem falschen Weg?

Vielen Dank für eure Hilfe!

Liebe Grüße

unic0rned
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Also ich habe es geschafft die calc Liste als Datenbank zu registrieren.

Eigentlich geht es nur darum dieses Feld zu erzeugen mit der Variablen "Lfd. Nummer"

und dann anhand dieser Variablen genau in der Datenbank die richtige Abfrage zu machen.

Da komme ich jetzt nicht weiter :(
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von RobertG »

Hallo unicOrned,

vielleicht hilft Dir eine Parameterabfrage:

Code: Alles auswählen

SELECT "Vorname", "Name", "Straße", "Ort" FROM "Tabelle" WHERE "Lfd. Nummer" =:LfdNr
Dann muss der Benutzer bei jedem Aufruf die Nummer eingeben und bekommt die dazu passende Adresse in der Abfrage zu sehen.

Gruß

Robert
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Okay jetzt bin ich zehn Schritte weiter.

Also ich schaffe es, eine Parameterabfrage zu machen. Beziehungsweise mehrere. Ich habe jetzt eine für die lfd. Nr erstellt und eine für den Kurznamen, den es in der Liste gibt.

Gibt es eine Möglichkeit, ein Seriendruckfeld zu erstellen in das man die Ergebnisse der Parameterabfrage füllen lassen kann?

Mit der Drag and Drop Methode schaffe ich es nur, dass immer nur entweder die lfdNr Abfrage in die Felder gefüllt werden kann oder die andere.

Also ich müsste eine Art Platzhalter erschaffen, der dann von allen Abfragen aus befüllt werden kann. Am liebsten direkt. Also dass die Parameterabfrage am Ende automatisch die gefundene Zeile in die entsprechenden Variablen füllt.




Außerdem möchte ich noch überlegen ein kleines Formular hierfür zu erstellen.

Ich verzweifel nur gerade daran, dass Formular per Makro zu öffnen.

Mein Formular innerhalb der Datenbank heißt einfach "Formular".

Ich habe aus einem anderen Thread diesen Code geholt:

Code: Alles auswählen

Sub Main
  
  ThisDatabaseDocument.FormDocuments.getByName("Formular").open

End Sub
Als Fehler bekomme ich Objektvariable nicht belegt und die ganze Zeile wird markiert.
Muss ich vorher noch die Datenbank öffnen oder so?

Vielen Dank für die Hilfe!

Frohen Nikolaus :)
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von RobertG »

Hallo unicOrned,
unic0rned hat geschrieben: Also ich schaffe es, eine Parameterabfrage zu machen. Beziehungsweise mehrere. Ich habe jetzt eine für die lfd. Nr erstellt und eine für den Kurznamen, den es in der Liste gibt.
Du kannst in einem Serienbrief nur eine Anfrage vernünftig nutzen. Die Daten gehören alle in diese eine Abfrage. Da kannst Du dann ruhig auch zwei Parameter mit einem Rutsch abfragen.

Code: Alles auswählen

SELECT "Vorname", "Name", "Straße", "Ort" FROM "Tabelle" WHERE "Lfd. Nummer" =:LfdNr OR "Kurzname" =:Kurzname
Diese Abfrage funktioniert möglicherweise schon.
unic0rned hat geschrieben: Außerdem möchte ich noch überlegen ein kleines Formular hierfür zu erstellen.
Das erschließt sich mir nicht, wozu Du das benötigst. Du hast doch eine Calc-Tabelle, oder? Die ist schreibgeschützt. Da hilft Dir auch kein Formular.
unic0rned hat geschrieben:

Code: Alles auswählen

Sub Main  
  ThisDatabaseDocument.FormDocuments.getByName("Formular").open
End Sub
Als Fehler bekomme ich Objektvariable nicht belegt und die ganze Zeile wird markiert.
Muss ich vorher noch die Datenbank öffnen oder so?
In dem Code steht zum Beginn "ThisDatabaseDocument". Das besagt, dass sich der Code nur innerhalb eines Datenbankdokumentes ausführen lässt - für ein Formular, das in der Datenbank liegt.
Du kannst
- ein Formular im Writer erstellen und als Datenbankformular nutzen oder
- die Datenbank öffnen und dort dann das Formular öffnen.
Für den zweiten Weg musst Du über

Code: Alles auswählen

StarDesktop.loadComponentFromURL()
erst einmal die Datenbankdatei öffnen. Schau Dir für so etwas gegebenenfalls das Handbuch an. Aber überlege Dir erst einmal, ob Du das wirklich benötigst.

Gruß

Robert
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Hey Robert du bist Klasse.

Du hast mir genau geholfen.

Ich bin nicht drauf gekommen, dass ich in einer Abfrage einfach mehrere Werte abfragen kann und diese mit 'OR' verknüpfen kann.

Wie du schon vermutet hast reicht diese Funktionalität erstmal vollständig aus.

Nun habe ich also schonmal etwas funktionierendes. Das kann ich so schonmal benutzen.

Nun würde ich gerne meinen Mitarbeitern das Leben noch ein wenig einfacher machen, weil ich das Gefühl habe, dass selbst dieser relativ einfache Weg einige von denen immer noch überfordern kann.

Als Alternative möchte ich meinen Kollegen die Möglichkeit anbieten, in ein Feld innerhalb des Writer Dokuments eine Zahl einzutippen. Diese Zahl hat am Ende immer einen bindestrich. Also zum Beispiel "1342-" deswegen muss man das Feld als Text deklarieren und nicht als reine Zahl.

Nun würde ich gerne, dass Open Office immer wenn man eine Zahl eintippt, (oder wahlweise per schaltfläche) innerhalb der Datenbank eine Abfrage macht und dort genau den Datensatz raussucht. Dafür kann ich ja bestimmt meine schon vorhandene Parameterabfrage benutzen.
Wichtig wäre mir, dass die gefundenen Werte AUTOMATISCH in die vorher definierten Serienfelder eingefügt werden.

Ich habe das Szenario mal ganz versimpelt erstellt und hänge das hier mal an damit man besser versteht was ich meine.

Vielen Dank für eure Hilfe. Ich weiß nicht wie lange ich gebraucht hätte ohne euch dies rauszufinden!!!
Dateianhänge
Serienbrief.odt
(10.39 KiB) 109-mal heruntergeladen
Adressenbuch.ods
(10.16 KiB) 128-mal heruntergeladen
Adressen.odb
(2.65 KiB) 121-mal heruntergeladen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von RobertG »

Hallo unicOrned,

ich habe das einmal etwas anders umgesetzt. Das ist jetzt kein Serienbrief mehr, sondern ein Formular. Ich weiß jetzt nicht, ob die Verbindung zur Datenbank bei Dir automatisch klappt, wenn das Textdokument im gleichen Verzeichnis liegt wie die Datenbank. Außerdem musst Du für dieses Vorgehen die Ausführung von Makros ermöglichen.

Das Formular greift auf die Tabelle zu, nicht auf die Abfrage. Du gibst in das gefärbte Feld einen Wert ein, nach dem gefiltert werden soll. Wenn Du das Feld verlässt (neben das Feld klicken), dann wird der Wert in den Filter des Formulars geschrieben und das Formular mit dem gefilterten Wert neu eingelesen. Der Datensatz zum gefilterten Wert erscheint dann in den Textfeldern, die keine Umrandung haben.

Die Lösung, so etwas über den Serienbrief zu erledigen, scheint mir dann doch recht umständlich.

Gruß

Robert
Dateianhänge
Serienbrief.odt
Formular mit Adressfeld
(11.19 KiB) 130-mal heruntergeladen
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Hey Robert,

vielen Dank. Ja ich denke auch, dass Makros der richtige Weg sind.

Bei deinem kommt bei mir leider ein Basic Runtime error.


In Zeile
inI = oEvent.Source.Model.CurrentValue

Fehlermeldung:

"Argument ist nicht optional"

Habe die beide ins selbe Verzeichnis getan muss ich noch irgendwas tun um die zu verbinden.

Liebe Grüße

unic0rned
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von RobertG »

Hallo unicOrned,

mache einmal einen Rechtsklick auf das gelbe Formularfeld. Im Kontextmenü klickst Du "Formular" an. Was steht in dem Formular unter "Daten" als "Datenquelle"?

Gruß

Robert
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von RobertG »

Hallo unicOrned,

ich habe etwas gegrübelt, wie Du wohl zu so einer Fehlermeldung bei dem Dokument kommen kannst. Die einzige Möglichkeit, die ich gefunden habe, ist, dass ich das Makro im Basic-Editor direkt starte. Nur dann fehlt der Parameter.
Der Start des Makros erfolgt aber, sobald das Feld für die Zahleneingabe (ohne den Bindestrich) erfolgt ist.

Gruß

Robert
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Hallo Robert,

Ich bin gerade nicht zu hause und kann deshalb deine Lösung noch nicht ausprobieren.
Du hast vollkommen recht, dass ich den Fehler so produzierthabe . Ich wollte ausprobieren ob das makro funktioniert und habe es deswegen aus dem Editor gestartet.
Bei mir kamen nämlich keine Werte zurück in die Felder. Ich habe die Nummer ohne - eingegeben. Aber ich denke der rechtsklick und die Datenquelle angeben könnte das lösen.
Ich gebe dir heute abend bescheid.

Vielen Dank

Unic0rned
unic0rned
**
Beiträge: 36
Registriert: Fr, 02.12.2016 09:06

Re: Abfrage in Writer die Anschrift aus Database zurück gibt

Beitrag von unic0rned »

Häh komisch,

ich hatte vorhin schon eine Antwort geschrieben.

Na egal jedenfalls hat jetzt alles super geklappt! Vielen lieben Dank.

Falls jemand das mal reproduzieren will. Man muss im Entwurfsmodus die verschiedenen Felder anklicken und dann einmal im Formular... Feld und im Kontrollfeld... Dialog alles auf die eigene Datenbank einstellen. Vor allem bei den unteren Adressfeldern muss man die richtige Tabelle angeben und alles korrekt verlinken. Muss man einfach ein wenig tüfteln :):)

Jetzt läuft alles wie gewollt. Du bist ein Künstler Robert ;)

Ich werde jetzt versuchen beide Möglichkeiten parallel zu integrieren. Also das die Mitarbeiter die Wahl haben zwischen Nummer eintippen und das Datenquellenfenster benutzen. Mal schauen wie ich das hinkriege.


Du scheinst dich ja echt gut auszukennen Robert. Ich habe noch eine kleine Frage an dich.

Und zwar hat mein Unternehmen momentan eine Doppellösung für ihre Daten. Das heißt sie sind zum Einen im Mac Adressbuch gespeichert und zum anderen als Open Office Tabelle vorhanden. Gerne würde ich diese Redundanz entfernen.

Leider hat die Zusammenarbeit von Mac Adressbuch und Open Office bei mir nicht wirklich zuverlässig geklappt weswegen ich die Tabellenform im Moment beibehalte. Hast du eine Ahnung woran das liegen könnte.

Ich benutze die neueste Open Office Version und Mac OS El Capitan.

Die Verbindung funktioniert soweit aber sehr sehr häufig stürzt Open Office beim Zugriff auf die Daten ab. Hast du eine Idee woran das liegen könnte? Außerdem ist es sehr langsam beim Zugriff. Ich habe auch sehr viele Kontakte eingespeichert. 2500 Stück.

Ich überlege nun daraus eine mysql Datenbank zu machen aber dann habe ich immer noch das Problem, beides pflegen zu müssen. Gerne würde ich einfach nur das mac Adressbuch benutzen.

Hast du Erfahrung hiermit und eine Idee woher die Abstürze kommen können?

Vielen Dank für deine Hilfe!!! Ich wünsche dir ein frohes Fest!

unic0rned
Antworten