Seite 1 von 1
Feld Versteckter Absatz funktioniert nicht
Verfasst: So, 05.03.2006 22:51
von cinaebnit
Hallo
Was mache ich falsch?
In früheren Star/OpenOffice-Versionen habe ich einen Absatz mit der Feldfunktion "Versteckter Absatz" datenbankgesteuert zum Verschwinden gebracht, in dem ich die Bedingung FELDNAME EQ "" eingesetzt habe, wobei FELDNAME ein Feld der verknüpften Datenbank ist. Der Absatz wurde immer dann versteckt, wenn der Feldinhalt leer ist.
Seit dem Upgrade auf OpenOffice.org will das nicht mehr gehen. Der Absatz wird immer angezeigt (Ansicht-Versteckte Absätze = OFF!).
Ich habe ausserdem versucht, das Datenbankfeld vollqualifiziert anzugeben ([Datenkbankname.Abfragename.Feldname]).
Ich habe statt EQ auch == verwendet, statt "" auch ''
Immer dasselbe Un-Resultat: gleichgültig welchen Wert das Datebankfeld Feldname auch hat: Ob leer oder nicht, der Absatz wird angezeigt.
Was mache ich falsch?
Verfasst: Mo, 06.03.2006 06:58
von Lenu
Hast Du's schon so versucht:
!FELDNAME
oder
NOT FELDNAME
→ siehe auch
Verfasst: Di, 07.03.2006 21:27
von cinaebnit
Besten Dank Lenu für den Tipp!
Ich habe inzwischen herausgefunden, woran es liegt:
Ich hatte für den Serienbrief eine _Abfrage_ (Query) verwendet.
Leere Felder in der Quelltabelle scheinen aber nach einer Abfrage nicht mehr leer zu sein.
Wenn ich die Originaltabelle (einer dBase-Datenbank) als Datenquelle einsetze, funktioniert es.
Dann funktioniert übrigends auch Deine Syntax korrekt.
Verfasst: Fr, 24.03.2006 21:01
von laura36
Hallo,
das scheint ein Bug in OpenOffice 2.0 (auch noch 2.0.2) zu sein. Ich habe verschiedenes ausprobiert: an dem Kriterium "leere Felder" scheint es nicht zu liegen, denn auch wenn man die Bedingung spezifischer formuliert, klappt es nicht. Eher scheint es, dass es mit Abfragen und Fremddatenbanken (zumindest MySQL) prinzipiell nicht funktioniert. Weder mit ODBC noch mit JDBC
Bis Version 1.5 hat es wunderbar geklappt.
Beim Suchen bin ich auf folgendes gestoßen:
http://www.openoffice-suche.de/index.ph ... 3.BCber_OD
irgendwer hat das auch schon als bug berichtet (finde die Seite aber nicht mehr).
weiß jemand mehr?
grüße
Verfasst: Sa, 25.03.2006 14:31
von pmoegenb
Hallo laura36,
ich erachte das eher als unwahrscheinlich. Egal ob ich direkt oder per ODBC zugreife, wenn die Bedingung korrekt formuliert wurde klappt dies auch.
Angenommen Du hast im Dokument einen Feldnamen mit der Bezeichnung Adresse1, dann heißt die Bedingung, die vor den Feldnamen eingefügt werden muss, not(Adresse1).
Gruß
Peter
Verfasst: Sa, 25.03.2006 16:19
von laura36
Hallo pmoegenb,
Danke für die Antwort.
ich habe es mehrfach getestet. Wie gesagt, am Treiber scheint es nicht zu liegen. Mit der base-eigenen Datenbank habe ich es noch nicht probiert. Allerdings gibt es folgendes Phänomen:
Bei manchen Abfragen funktioniert es tatsächlich. Bei komplexeren Abfragen über mehrere Tabellen klappt es nicht. Der Absatz ist immer sichtbar. Ich hab es ausgiebig in allen möglichen Syntax-Varianten probiert.
Das Verhalten ist leider nicht konsistent. Ist beim ersten Aufruf eines Datensatzes (direkt nach Bearbeitung der Bedingung) alles ok, ändert sich dies beim "Daten in Felder" bei einem nächsten Satz.
Alles rätselhaft.
Zum Formulieren der Bedingung gibt's prinzipiell viele Möglichkeiten
not(Adresse1)
!Adresse1
Adresse1 == ""
manchmal scheinen sich alle etwas unterschiedlich zu verhalten. Es funktioniert mit keiner richtig.
Kein Problem gibt es bei Tabellen und einfachen Abfragen. Daher nehme ich stark an, dass es nicht an den formulierten Bedingungen liegt. (Warum sollte ich da immer Fehler machen, bei den Tabellen nicht

?
grüße
laura
Verfasst: Sa, 25.03.2006 22:50
von laura36
Hallo,
Noch eine Ergänzung:
das gleiche Dokument (es handelt sich um Etiketten) funktioniert unter OO 1.3 problemlos. Dort werden alle Absätze versteckt, wenn die Felder leer sind. In 2.0 tritt der Fehler auf. Das hat cinaebnit ja ähnlich berichtet.
Nur, wo liegt der Fehler?
grüße
laura
Verfasst: So, 26.03.2006 12:00
von pmoegenb
Hallo laura,
Du schreibst immer von einer Ansicht. Wenn Du ein Seriendruckfeld einfügst und davor eine Bedingung wie versteckter Absatz. Dann wird die Ansicht erst richtig dargestellt wenn Du in der Datenquellen-Ansicht den entsprechenden Datensatz markierst und dann den Schalter Daten in Felder anklickst.
Wie der Ausdruck Seriendruckfeld schon aussagt, erfolgt die Auswertung sonst nur beim Seriendruck.
Verfasst: Mo, 27.03.2006 23:38
von laura36
Hallo Peter,
danke für die Anwort, aber ich verstehe nicht ganz. Ich habe ja gar nichtsvon einer "Ansicht" geschrieben. Die Funktionsweise von der Felder und Bedingungen ist mir schon klar. Auch hatte ich schon geprüft, ob beim Ausdruck dann alles klappt und nur am Bildschirm nicht bei "Daten in Felder". Ist aber leider nicht der Fall.
Um nochmal festzuhalten:
1. Die Funktion "Absatz verstecken" funktioniert, wenn sich die Felder auf eine Tabelle in der mysql Datenbank beziehen (die über jdbc oder odbc eingebunden ist.
2. Sie funktioniert bei ( zumindest bei komplexen ) Abfragen aber nicht. (ich hänge unten mal ein Beispiel an).
3. Bei Abfragen gibt es zwei Fälle - ich habe noch nicht herausgefunden, dass sich das konsistent verhält: entweder wird der Datensatz immer gedruckt oder nie.... Die Bedingung wird ignoriert, bzw. falsch interpretiert
4. Die gleiche !!! Abfrage mit dem gleichen !!! Dokument (als sxw gespeichert) funktioniert unter OpenOffice 1.3 problemlos. Hier werden alle Bedingungen richtig interpretiert.
5. Das Phänomen taucht auf bei OpenOffice.org 2.0, 2.0.1, 2.0.2 unter Debian Sarge, mysql 4.1.11-Debian_4sarge2, unixODBC 2.2.4
grüße
laura
So sieht die Abfrage aus, mit der ich es ausgiebig getestet habe:
SELECT
vid,
pid,
organisationen.oid,
iid,
`vnname` AS Verteilername,
concat(
IF(LENGTH(psex), concat(psex,' '),''),
IF(LENGTH(ptitel), concat(ptitel,' '),''),
IF(LENGTH(pvorname), concat(pvorname,' '),''),
IF(LENGTH(pnachname),pnachname,''),
IF(LENGTH(ititel),concat(ititel, ' '),''),
IF(LENGTH(ivorname),concat(ivorname, ' '),''),
IF(LENGTH(inachname),concat(inachname, ' '),'')
) AS Name,
CONCAT( IF( LENGTH( `organisationen`.`oco` ), `organisationen`.`oco`, '' ), IF( LENGTH( `organisationen_1`.`oco` ), `organisationen_1`.`oco`, '' ) ) AS `co`,
concat( IF( LENGTH( `organisationen`.`oname` ), `organisationen`.`oname`, ''), IF( LENGTH( `organisationen_1`.`oname` ),`organisationen_1`.`oname`, '') ) AS Organisation ,
concat( IF( LENGTH( `pstrasse` ), `pstrasse`, '' ), IF( LENGTH( `organisationen`.`ostrasse` ), `organisationen`.`ostrasse`, '' ), IF( LENGTH( `organisationen_1`.`ostrasse` ), `organisationen_1`.`ostrasse`, '')) AS `Strasse`,
concat( IF( LENGTH( `organisationen`.`opostfach` ), `organisationen`.`opostfach`, '' ), IF( LENGTH( `organisationen_1`.`opostfach` ), `organisationen_1`.`opostfach`, '')) AS `Postfach`,
concat( IF( LENGTH( `pplz` ), `pplz`, '' ), IF( LENGTH( `organisationen`.`oplz` ), `organisationen`.`oplz`, '' ), IF( LENGTH( `organisationen_1`.`oplz` ), `organisationen_1`.`oplz`, '')) AS `PLZ`,
concat( IF( LENGTH( `port` ), `port`, '' ), IF( LENGTH( `organisationen`.`oort` ), `organisationen`.`oort`, '' ), IF( LENGTH( `organisationen_1`.`oort` ), `organisationen_1`.`oort`, '')) AS `Ort`,
concat( IF( LENGTH( `pland` ), `pland`, '' ), IF( LENGTH( `organisationen`.`oland` ), `organisationen`.`oland`, '' ), IF( LENGTH( `organisationen_1`.`oland` ), `organisationen_1`.`oland`, '')) AS `Land`,
concat( IF( LENGTH( `pstatus` ), `pstatus`, '' ), IF( LENGTH( `organisationen`.`ostatus` ), `organisationen`.`ostatus`, '' ), IF( LENGTH( `organisationen_1`.`ostatus` ), `organisationen_1`.`ostatus`, '')) AS `Status`,
vpostanzahl AS Anzahl
FROM `verteiler` `verteiler`
LEFT JOIN `organisationen` `organisationen` ON vorganisation = `organisationen`.`oid`
LEFT JOIN inorgapersonen ON vinorgaperson = iid
LEFT JOIN `organisationen` `organisationen_1` ON iorganisation = `organisationen_1`.`oid`
LEFT JOIN personen ON vperson = pid
LEFT JOIN `verteiler_name` `verteiler_name` ON vdname = vnid
WHERE
vpostanzahl > 0
AND
(pstatus = '' OR (organisationen.ostatus = '' OR organisationen_1.ostatus = '')
AND
(port <> '' OR (organisationen.oort <> '' OR organisationen_1.oort <> ''))
AND
(
pstrasse <> '' OR (organisationen.ostrasse <> '' OR organisationen_1.ostrasse <> '')
OR
(organisationen.opostfach <> '' OR organisationen_1.opostfach <> '')
)
)
ORDER BY Verteilername, PLZ
Verfasst: Di, 28.03.2006 02:10
von laura36
Ist als Bug berichtet. Allerdings nur für 2.0.1 u. 2.0.2. Gibt aber bei Etikettendruck auch Probleme mit 2.0
http://dba.openoffice.org/issues/show_bug.cgi?id=60950
grüße
laura
Verfasst: Di, 28.03.2006 08:16
von pmoegenb
Hallo laura,
Ich habe ja gar nichtsvon einer "Ansicht" geschrieben.
Stimmt, da habe ich mich verguckt, das war cinaebnit.
Bei den Betriebssystemen die Du jetzt angibst muss ich leider passen.
Lösungsvorschlag
Verfasst: Mi, 12.04.2006 09:41
von Karen Steffen
Unbedingt in OpenOffice ausschalten:
Ansicht - versteckt Absätze
Eintrag:
1. Einfügen -Feldbefehl - Andere... - Datenbank - Seriendruck-Feld
Datenbankauswahl - Datenbankfeld
dann direkt dahinter:
2. Einfügen - Feldbefehl - Andere... - Funktionen - versteckter Absatz
Bedingung: Datenbankfeld == ""
Hoffe, ich konnte helfen
Verfasst: Mo, 21.08.2006 14:09
von Ein__Stadtmensch
> Hoffe, ich konnte helfen
Mir schon
Klappt echt super, danke!!