Frage stellen
0

Writer - Variabler Text mit Base Daten

gefragt 2019-03-21 13:56:17 +0200

patrick.de Gravatar-Bild

Hallo,

ich habe ein Base file Source.odb mit Tabelle Main. In der Tabelle sind unter anderem die Variablen Kind 1 Vorname , Kind 2 Vorname ... Kind 6 Vorname .

In einem Writer-Dokument möchte ich einen Satz wie "Der Termin mit <kind 1="" vorname=""> und <kind 2="" vorname=""> findet am 1. Januar statt" haben. Je nach Anzahl der eingetragenen Vornamen in der Datenbank soll der Satz variabel gestaltet sein, bei einem Kind "... mit <Kind 1 Vorname> findet ... ", bei drei Kindern "... mit <Kind 1 Vorname>, <Kind 2 Vorname> und <Kind 3 Vorname> findet ... " usw.

Ich bekomme das mit hidden sections hin, allerdings gibt es da einige Probleme - die Sections werden in der Ansicht bevor ich Drucke alle eingeblendet, was das Dokument auf zwei Seiten vergrößert. Beim Druck entsteht nur eine Seite, da ja fünf der sechs Sections ausgeblendet werden, das Feld für den page count sagt dann aber Seite 1 von 2. Außerdem habe ich in den Sections noch Variablen, die ich manuell mit einem Dropdown definiere.

Was ist der beste Weg, um einen Variablen Input so hinzubekommen? Ich habe es mit Queries versucht, aber da habe ich Probleme mit dem variablen Platzieren von Kommata und "und" je nach Anzahl der Namen.

Bearbeiten Tags ändern Melden schließen vereinen löschen

1 Antwort

1

geantwortet 2019-03-21 16:34:08 +0200

RobertG Gravatar-Bild

updated 2019-03-22 18:53:50 +0200

Ich würde den Weg über die Datenbank gehen. Alles, was Du dort erledigen kannst, das stört den Seitenaufbau des Writers nicht mehr groß.

Mit SELECT "Kind 1 Vorname"||', '||"Kind 2 Vorname" FROM "Tabelle" kannst Du Felder zusammenfassen. Bei leeren Feldern würde das Ergebnis allerdings leer bleiben. Das könnte jetzt, ungetestet, genutzt werden: SELECT COALESCE("Kind 1 Vorname"||', '||"Kind 2 Vorname"||' und '||"Kind 3 Vorname", "Kind 1 Vorname"||' und '||"Kind 2 Vorname", "Kind 1 Vorname") AS "Kinder" FROM "Tabelle" COALESCE gibt immer den ersten Ausdruck wieder, der nicht NULL ist. Ich gehe dabei davon aus, dass wirklich die Kinder hintereinander aufgeführt sind, und nicht 2 fehlt, 3 aber da ist.

Ansonsten stände noch die Möglichkeit mit CASE WHEN zur Verfügung. Eine Zusammensetzung des Strings insgesamt und dann einfach ein Ersetzen des letzten Kommas durch 'und' ist leider ein Problem, da die Suchfunktionen der internen Datenbank meines Wissens nur von vorne nach hinten laufen, ich also nicht von hinten aus das letzte Komma suchen kann. Deswegen diese Lösung mit COALESCE.

Bearbeiten Melden löschen Link mehr

Kommentare

Vielen Dank! Leider ist das mit dem Komma und "und" insofern wichtig, als dass ein manuelles Einsetzen im Nachhinein dann den Sinn der Übung etwas verfehlt. Bis ich dafür eine elegante Lösung gefunden habe, arbeite ich vorerst mal mit versteckem Text und schreibe für jede Anzahl an Kindern einen Abschnitt. Die Variable Anzahl Kinder steuert dann, welcher Abschnitt gezeigt wird.

patrick.de Gravatar-Bildpatrick.de ( 2019-03-22 14:52:09 +0200 )Bearbeiten

Aber genau das macht doch das Beispiel: Es setzt ein Komma zwischen alle Kindernamen. Nur der letzte Trenner wird ein 'und'. Du brauchst nur eine Abfrage entsprechender Art machen und hast das Ganze zusammen in der Variablen "Kinder" stehen.

RobertG Gravatar-BildRobertG ( 2019-03-22 18:52:28 +0200 )Bearbeiten

Danke, der Output ist genau so, wie er sein sollte! Ein Problem noch: Wenn ich das Query als Field im Writer einfüge, wird das Field sofort mit den Einträgen aus der Datenbank gefüllt. Konkret: Ich habe zwei Einträge in der Datenbank, Familie Müller und Familie Maier. Die Müllers haben nur ein Kind, Peter, während die Maiers drei Kinder, Tick, Trick und Track haben.

Sobald ich das Field nun einfüge, ist der Output

Peter
Tick, Trick und Track

Wie bekomme ich es hin, zunächst nur <kinder> im Writer zu haben und das Feld erst zu füllen, wenn ich Mail Merge nutze? Und dann eben auch nur mit der einen im Mail Merge ausgewählten Familie?

Aber die Funktion ist super, wieder was gelernt, danke!!

patrick.de Gravatar-Bildpatrick.de ( 2019-04-02 12:50:29 +0200 )Bearbeiten

Hat das denn nichts mit der Anzeige der Feldnamen (statt des Inhaltes) zu tun? Du hast doch die Abfrage als Grundlage Deines Serienbriefes. So, wie ich das aus dem Base-Handbuch kenne, klicke ich mit der Maus auf den Tabellenkopf "Kinder" und ziehe von dort (gedrückte linke Maustaste) in das Dokument. Dann steht dort <kinder>. Drucke ich das, dann wird dort der Serienbriefinhalt gedruckt. Aber genau das müsstest Du ja schon gemacht haben ...

RobertG Gravatar-BildRobertG ( 2019-04-04 17:21:20 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2019-03-21 13:56:17 +0200

Angesehen: 38 Mal

Aktualisiert: Mar 22