Seite 1 von 2
[Gelöst] Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Do 22. Dez 2016, 11:14
von DrMartinus
Hallo,
ich habe folgendes Problem:
Bedingung: DBName.Abfrage_DBName_DBName_DBName.Ehename_Frau != DBName.Abfrage_DBName_DBName_DBName.Ehename_Mann
Dann: Frau <DBName.Abfrage_DBName_DBName_DBName.Ehename_Frau>' und Herrn ' <DBName.Abfrage_DBName_DBName_DBName.Ehename_Mann>
Sonst: 'Ehepaar ' <DBName.Abfrage_DBName_DBName_DBName.Ehename_Frau>
Es wird nichts ausgegeben. Ich habe in der Bedingung auch versucht:
<DBName.Abfrage_DBName_DBName_DBName.Ehename_Frau> != <DBName.Abfrage_DBName_DBName_DBName.Ehename_Mann>
Das hat aber nichts verändert. Hat jemand einen Tip? Die Hilfestellungen im WWW helfen mir leider nicht weiter, da sie das Eigentliche (z.B. wie man die Feldverweise formatiert) nicht enthalten.
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Do 22. Dez 2016, 13:17
von DrMartinus
Alles vor längerer Zeit schon mal durchexerziert. Wenn ich doppelte Anführungszeichen verwende, kommt folgendes raus:
"Ehepaar " [DBName.Abfrage_DBName_DBName_DBName.Ehename_Frau]
und zwar genauso in der Endausgabe wie oben wiedergegeben (DBName ist natürlich der richtige Name der Datenbank).
Wenn ich versteckte Absätze benutze, müsste ich ja zwei solcher Absätze hintereinander haben, den einen für den einen Fall und den anderen für den andern, klar. Da werden mir dann aber nur 2 oder 3 von 8 Datensätzen ausgegeben, nach einem völlig unerklärlichen Prinzip (sind aber immer die selben).
Zwei einfache Hochkommas hintereinander (dann also doppelt) zeitigen übrigens das gleiche Ergebnis wie in meinem ersten Post wiedergegeben: gar nichts.
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Fr 23. Dez 2016, 11:34
von DrMartinus
nikki hat geschrieben:
Neben normaler Texteingabe, können Sie in den Ergebnisfeldern Dann und Sonst auch Datenbankfelder in der Form "Datenbankname.Tabellenname.Feldname" (ohne Anführungszeichen) angeben, um die Feldinhalte in Abhängigkeit von der Bedingung einzufügen. LibreOffice versucht bei solchen Ausdrücken zunächst, den Text als Datenbankspalte zu identifizieren. Wenn diese existiert, wird der Inhalt der Spalte, ansonsten einfach der Text ausgegeben.
Ich verstehe das so, dass sowohl normale Texteingabe als auch Datenbankfelder, ggfs. zusammen, ausgegeben werden können. Es wäre wohl besser, zu schreiben: "Es kann entweder normale Texteingabe oder Datenbankfelder..."
Aber Sinn macht es auch dann nicht. Normalerweise muss man ja zwischen mehreren Datenbankfeldern wenigstens eine Leerstelle oder ein Komma oder so haben. Aber es ist vermutlich müßig, über die Qualität der Programmhilfe zu sinnieren. Ich hatte den Text jedenfalls so verstanden, dass man Text und Datenbankfeld in die Felder "Dann und Sonst eintragen kann.
Das mit den versteckten Absätzen habe ich schon verstanden, es zeitigt aber, wie schon gesagt, sehr merkwürdige Ergebnisse (Ausgabe von nur einem Teil der Datensätze ohne erkennbares Ausschlusskriterium). Ich werde mal noch weiter rumtüfteln, vielleicht kommt mir ja doch nochmal die Erleuchtung. Jetzt habe ich mir händisch geholfen, da es nicht so viele Datensätze sind. Aber optimal ist das nicht, und meine Erwartungen halte ich eigentlich auch nicht für sonderlich außergewöhnlich.
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Fr 23. Dez 2016, 16:48
von DrMartinus
Ob eindeutig, sei mal dahingestellt. Für mich schließt der besagte Satz nicht aus, dass beides da stehen kann. Denn wenn ein Text nicht als Datenfeld interpretiert werden kann, wird er eben als Text ausgegeben, und wenn er als Datenfeld interpretiert werden kann, kommt der Inhalt des Feldes rein. Es sagt mit keiner Silbe, dass nicht Text und Datenfeld nebeneinander stehen können, und es impliziert es m.E. auch nicht. Eher im Gegenteil: ich habe den Eindruck gewonnen, dass damit gesagt wird, dass LibreOffice beides drin haben kann und nach Notwendigkeit damit verfährt. Aber wie gesagt, es ist müßig, darüber zu debattieren.
Schade ist, dass es zu meinem Problem offenbar keine vernünftige Lösung gibt. Ich hätte zahlreiche Serienbriefe, in denen ich so etwas einsetzen würde, weil es ein sehr praktischer Weg ist, Serienbriefe persönlich zu gestalten. Bei großen Datenmengen (und die jetzigen Datenbestände wachsen) wird es dann unumgänglich.
Naja, irgendwelche Krücken zur Problemlösung wird es sicher geben, es dauert dann eben nur länger, sie zu finden.
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Sa 24. Dez 2016, 10:00
von F3K Total
Dr. Martinus,
es ist doch überhaupt kein Problem, die Sache innerhalb der Datenbank per SQL zu lösen.
Beispiel anbei, siehe Abfrage Anrede.
Gruß R
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Di 27. Dez 2016, 13:14
von DrMartinus
Danke für den Hinweis. Aber die Ausgabe ist nicht das, was ich erwarte. Manchmal steht da nur "Frau", manchmal "Ehepaar", manchmal "Frau" mit dem Nachnamen...
Ich kenne mich mit SQL nicht so gut aus, verstehe auch die Abfrage nicht so ganz.
Code: Alles auswählen
SELECT CASEWHEN( "Ehename_Frau" = "Ehename_Mann", 'Ehepaar ' || "Ehename_Frau", 'Frau ' || "Ehename_Frau" || ' und Herr ' || "Ehename_Mann" ) "Anrede" FROM "Personen"
Welche Funktion haben die "||"? Ich brauche:
Wenn "Ehename_Frau" == "Ehename_Mann" -> Ehepaar "Ehename_Mann"
Wenn "Ehename_Frau" != "Ehename_Mann" -> Frau "Ehename_Frau" und Herr "Ehename_Mann"
als Ausgabe
Das bildet sich mir in der obigen SQL-Abfrage noch nicht ab. Und wie verlinke ich zu dem "Feld" Anrede im Serienbrief?
Danke für die weitere Hilfe.
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Mi 28. Dez 2016, 01:28
von F3K Total
Nabend
DrMartinus hat geschrieben:Das bildet sich mir in der obigen SQL-Abfrage noch nicht ab.
Verstehe ich nicht. Bei mir sieht das so aus:

- Anrede.png (26.24 KiB) 4687 mal betrachtet
Oder ist es so, dass nur ein Name, der des Ehemann, eingetragen ist? Dann braucht man nur
Code: Alles auswählen
SELECT CASEWHEN( "Ehename_Frau" = "Ehename_Mann", 'Ehepaar ' || "Ehename_Frau", 'Frau ' || "Ehename_Frau" || ' und Herr ' || "Ehename_Mann" ) "Anrede" FROM "Personen"
durch
Code: Alles auswählen
SELECT CASEWHEN( "Ehename_Frau" = "Ehename_Mann", 'Ehepaar ' || "Ehename_Mann", 'Frau ' || "Ehename_Frau" || ' und Herr ' || "Ehename_Mann" ) "Anrede" FROM "Personen"
zu ersetzen.
DrMartinus hat geschrieben:Und wie verlinke ich zu dem "Feld" Anrede im Serienbrief?
Öffne den Serienbrief, drücke F4, navigiere zur Abfrage
Anrede, ziehe den Spaltenkopf der
Spalte Anrede an die Stelle im Serienbrief, wo sie gebraucht wird.
HTH R
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Mi 28. Dez 2016, 12:41
von DrMartinus
Sorry, peinlicher Fehler. In der Ausgabe war die Spalte nicht breit genug. Das sah ich aber nicht, weil, wenn Wörter nicht ganz in die Zeile reinpassen, sie offenbar ganz weggelassen werden. Das würde ich als einen Darstellungsfehler bei LibreOffice bezeichnen, aber naja. Das Ergebnis ist jedenfalls richtig. Nur wüsste ich natürlich schon gerne, wie ich diese SQL-Formel richtig verstehe, damit ich evtl. Anpassungen vornehmen kann.
Aber danke schonmal für diese Hilfe!
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Mi 28. Dez 2016, 16:04
von F3K Total
Ich versuche es:
Code: Alles auswählen
SELECT CASEWHEN( "Ehename_Frau" = "Ehename_Mann", 'Ehepaar ' || "Ehename_Mann", 'Frau ' || "Ehename_Frau" || ' und Herr ' || "Ehename_Mann" ) "Anrede" FROM "Personen"
Eigentlich genau wie WENN (Bedingung, dann, sonst) in Calc
also
WENN
beide Namen identisch
DANN
SONST
Code: Alles auswählen
'Frau ' || "Ehename_Frau" || ' und Herr ' || "Ehename_Mann"
wobei einfache Anführungszeichen einen feststehenden Text umschließen, doppelte die Spaltennamen und die zwei Pipes || den Text verketten.
Das "Anrede" vor FROM ist die neue Spaltenbezeichnung der entstandenen Spalte.
HTH R
Re: Problem mit bedingtem Text aufgrund von Feldinhalten
Verfasst: Do 29. Dez 2016, 12:10
von DrMartinus
Danke, das ist sehr erhellend!
Nun noch eine Frage: ich will in dem Dokument ja noch mehr Daten aus der Datenbank übernehmen. Kann ich da im Serienbrief zwei verschiedene Abfragen aus der gleichen Datenbank als Quelle benutzen, oder sollte ich diese Abfrage zu der anderen Abfrage hinzufügen, damit alles aus einer Abfrage stammt?
Danke noch einmal für die Mühe und Zeit, die Du für mich aufwendest!