Writer: Formulare - Datenbank - selbstausfüllend ...

Hi,

ich brauche bitte gerade mal eine Richtungsangabe ...

Folgendes will ich erreichen:
In einem Writer-Dokument sollen verschiedene Inhalte aus einer DB
eingefügt werden. Nehmen wir mal als Beispiel eine Adresse. Die bestehe
aus vorname, name, strasse, nummer, postleitzahl und ort.
Von solchen Datensätzen habe ich eine Menge in einer Datenbank. (vCard,
Thunderbird, da musste ich offenbar erst etwas in Base importieren?
Heißt jetzt nämlich `Neue Ddatenbank.odb`. Änderungen an der vCard/DB
werden nicht übernommen?!)

Jetzt möchte ich ein Listenfeld `Name` im Dokument haben in dem alle
Inhalte aus der Spalte `nachname` stehen. So das ich einen der Nachnamen
auswählen kann. Ok, das kriege ich hin. Jetzt ist da eine Liste der
Nachnamen die offensichtlich aus der DB gespeist wird. Ich kann auch
einen Eintrag daraus selektieren.
Aber wie jetzt weiter? Wie komme ich von da auf eine Aktion? Klar, in
der Konfiguration des Listenfelds unter Ereignisse `Maustaste
losgelassen` ein Makro einfügen ... aber welches?

Mein Ziel ist es beim Klick auf einen Nachnamen den Wert mehrerer Felder
dieses Datensatzes aus der DB zu lesen und auf verschiedene Felder im
Dokument zu verteilen.
Also ich selektiere den Nachnamen `Meyer` und bekomme im Dokument im
Feld Nachname `Meyer` angezeigt und im Feld Vornamen `Hermann` und im
Feld Straße `Am Mühlenweg` und so weiter. (Ich hoffe ich konnte mich
verständlich ausdrücken.)

Ausgerechnet die Kapitel 14 und 15 (Feldbefehle und Formulare) der
Writer Dokumentation scheinen leider noch nicht fertig zu sein.

Ich wühle mich da gerne durch, aber im Moment sehe ich den Wald vor
lauter Bäumen nicht.

Bernd

Hallo Bernd,

Folgendes will ich erreichen:
In einem Writer-Dokument sollen verschiedene Inhalte aus einer DB
eingefügt werden. Nehmen wir mal als Beispiel eine Adresse. Die bestehe
aus vorname, name, strasse, nummer, postleitzahl und ort.
Von solchen Datensätzen habe ich eine Menge in einer Datenbank. (vCard,
Thunderbird, da musste ich offenbar erst etwas in Base importieren?
Heißt jetzt nämlich `Neue Ddatenbank.odb`. Änderungen an der vCard/DB
werden nicht übernommen?!)

Du musst nichts importieren, sondern eine Verbindung zu der externen
Datenbank erzeugen. Thunderbird-Adressbuch wird da standardmäßig
angeboten. Nur wenn Du eine Verbindung zu einer Datenbank erzeugst, dann
werden die dortigen Änderungen auch übernommen. Gegebenenfalls musst Du
die Ansicht der Tabellen aktualisieren, wenn Du die Base-Datei mit der
Tabelle geöffnet hast und gleichzeitig in Thunderbird eine neue Adresse
eingibst.

Jetzt möchte ich ein Listenfeld `Name` im Dokument haben in dem alle
Inhalte aus der Spalte `nachname` stehen. So das ich einen der Nachnamen
auswählen kann. Ok, das kriege ich hin. Jetzt ist da eine Liste der
Nachnamen die offensichtlich aus der DB gespeist wird. Ich kann auch
einen Eintrag daraus selektieren.
Aber wie jetzt weiter? Wie komme ich von da auf eine Aktion? Klar, in
der Konfiguration des Listenfelds unter Ereignisse `Maustaste
losgelassen` ein Makro einfügen ... aber welches?

Willst Du einen Serienbrief schreiben? Dann verzichte besser auf das
Makrogedöns - denn das wird es, wenn Du mit einem Listenfeld in dem
Writerdokument arbeitest.

Arbeite stattdessen mit einer Abfrage:
SELECT * FROM "CollectedAddressBook" WHERE "Nachname" LIKE :Nachname
Wenn Du die Abfrage aufrufst, dann kommt eine Nachfrage nach dem
Nachnamen. Auch Teile davon reichen (bei Thunderbird) aus. Das filtert
Dir den Namen so gut, dass Du nur noch den Datensatz markieren musst,
den Du von den gefundenen Datensätzen in den Serienbrief (über "Daten in
Felder") übernehmen willst.

Ausgerechnet die Kapitel 14 und 15 (Feldbefehle und Formulare) der
Writer Dokumentation scheinen leider noch nicht fertig zu sein.

Ich kenne die Writer-Dokumentation nicht weiter. Im Handbuch Base ist
aber gerade zum Serienbrief das Notwendige enthalten. Vielleicht reicht
Dir das ja.

Gruß

Robert

Mist .. Ich hatte mir noch vorgenommen dazu zu schreiben das ich keinen
Serienbrief erzeugen will :slight_smile:

Es geht darum in einem Feld etwas zu selektieren (Das kriege ich schon
hin) und dann andere Felder im gleichen Dokument mit Daten aus dem
gleichen Datensatz aber eben andern Datenfeldern) zu füllen.

Bernd

Ich versteh es noch immer nicht. Willst du nur ein einziges Dokument
erstellen? Warum dann dieser Aufwand? So wie du es beschreibst, hört es sich
für mich noch immer nach einem Serienbrief an.

Peter Mulller

Klingt für mich eher nach einer Art Formular, wie. z. B. für eine
Rechnung o. ä.

Wolfgang

Hallo Bernd,

Willst Du einen Serienbrief schreiben? Dann verzichte besser auf das
Makrogedöns - denn das wird es, wenn Du mit einem Listenfeld in dem
Writerdokument arbeitest.

Mist .. Ich hatte mir noch vorgenommen dazu zu schreiben das ich keinen
Serienbrief erzeugen will :slight_smile:

Es geht darum in einem Feld etwas zu selektieren (Das kriege ich schon
hin) und dann andere Felder im gleichen Dokument mit Daten aus dem
gleichen Datensatz aber eben andern Datenfeldern) zu füllen.

Ich versteh es noch immer nicht. Willst du nur ein einziges Dokument
erstellen? Warum dann dieser Aufwand? So wie du es beschreibst, hört es sich
für mich noch immer nach einem Serienbrief an.

Klingt für mich eher nach einer Art Formular, wie. z. B. für eine
Rechnung o. ä.

Wolfgang

und könnte daher auch nach einem Base-Formular klingen, aber da müsste die Beschreibung wirklich klarer sein, oder vieleicht einscreenshot eines Entwurs auf irgendeinen Cloudspeicher hochladen und den Link mitteilen.

Gruß

Gerhard

Ja, so könnte man es sehen. Es ist keine Rechnung, aber hier als
Beispiel geht das.

Es ist ein ODT (also Writer) in dem mehrere Formularfelder sind. Es gibt
eine Datenbasis die pro Datensatz die Daten für die Formularfelder enthält.

Jetzt möchte ich in einem Formularfeld einen Datensatz auswählen (z.B.
Nachname) und es sollen die andern Felder diese Dokumentes mit den
korrespondierenden Werten des gleichen Datensatzes gefüllt werden.

Dazu habe ich ein Listenfeld (wahlweise ein Kombinationsfeld) in dem (in
unserm Beispiel) die Nachnamen stehen. Jetzt möchte ich dort einen Namen
wählen und dann die andern Felder automatisch füllen.

Ich denke ich muss die `Nummer` des Datensatzes erfahren um mich darauf
in den anderem Formularfeldern bei der SQL-abfrage zu beziehen. Aber wie
geht das?
In den Eigenschaften des Listenfeldes kann ich ein Marko ausführen
lassen wenn die Maustaste losgelassen wird. Aber welches? Es gibt da
LibreOffice Makros in großer Zahl zur Auswahl. Ich weiß nur nicht
welches mir eine eindeutige Bezeichnung des Datensatzes zurückgibt.

Bernd

Hallo Bernd,

ich würde vielleicht umgekehrt aufzäumen, das du eben Datensatznummer
angibst als Primärschlüssel und er dann nach die Felder ausfüllt.Bei
Nachnamen würdest Probleme Bekommen wenn wenn mehrere von einen Namen gibt.
Andreas Braess

Hallo Bernd,

also hast Du Formularfelder?
Dann kannst Du doch einfach die gewünschten Formularfelder aufziehen und
das Ganze mit einer Parameterabfrage lösen, die ich Dir in der ersten
Mail vorgeschlagen habe. Datenbasis des Writer-Formulars ist dann eben
diese Abfrage. Öffnest Du das Dokument, so erscheint die Parameterabfrage.

Mit Listenfeldern in Zusammenhang mit Thunderbird geht da nur die
Makroschine. Auch damit gibst Du dann an das Formular einen Filterwert
weiter. So etwas wie dieses Makro müsste laufen: