PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbankfeld wird in OpenOffice falsch formatiert



pixel
02.12.03, 10:22
Hi@all,

ich hoffe dies ist das richtige Forum für meine Frage. Wir betreiben einen Interbase-Server unter Linux. In diesem sind Adressen und andere Daten gespeichert welche ich für einen Serienbrief mit OpenOffice (1.1 Windows) benutzen möchte. Der Zugriff auf den Datenbank-Server von OO funktioniert auch, allerdings gibt es Formatierungprobleme.

In der Datenbank befindet sich in jedem Datensatz ein Feld welches die komplette Adresse fürs Adressfenster enthält. das Feld ist vom Typ Memo (Blob).

Wenn ich nun einen Serienbrief starte wird das Feld richtig angezeigt (Mehrzeilig) jedoch ist nach jeder Zeile ein ‪Rechteck (Sonderzeichen).
er scheint irgend ein Problem mit dem CR bzw. LF zu haben.
Kennt jemand das Problem bzw. weß wie man es lösen kann?

Gruß Pixel

LKH
02.12.03, 10:53
Hi,

ich glaube auch, dass das ein Probelm mit den unterschiedlichen Zeilenenden zwischen Windows und Linux zu tun hat. Eine Lösung weiss ich allerdings nicht dafür .... ausser:

dein Datenbankdesign ändern (ganze Adressen in einem LOB speichern - skandalös!). Adressen sind doch immer gleich aufgebaut mit Strasse, Postfach, PLZ-Straße, PLZ-Postfach und Ort (ggf. noch Land, Staat etc.). Und dafür nutzt man dann jeweils ein Feld.

Hoffe es hilft,

pixel
02.12.03, 14:01
Hi,

ich bin gerade dabei in OO die Einzelfelder zu verwenden. Daraus ergeben sich jedoch neue Probleme/Fragen die sich jedoch bestimmt lösen lassen.
Gibt es die Möglichkeit in OO Bedingungen zu formulieren und darauf zu reagieren?

Ein Beispiel:

Ich möchte die einzelfelder :

- Firmenbezeichnung
- Name
- Anrede
- Ansprechpartner
- Vorname
- Strasse
- PLZ
- Ort

aus der Datenbank verwenden. Die Adresse soll anschliessend wie folgt zusammengesetzt werden

[Firmenbezeichnung]
[Name]
z.Hd. [Anrede] [Vorname] [Ansprechpartner]

[Strasse]
[PLZ] [Ort]


Hier ergeben sich jedoch für mich folgende Probleme. Nicht jeder Adress-Datensatz enthält einen Ansprechpartner somit müsste ich dies Abfragen können damit wenn keiner vorhanden ist er diese Zeile überspringt. Ansonsten würde ja immer z.Hd. da stehen und eine unötige Leerzeile würde erzeugt.

Das zweite Problem ist das Feld Anrede. In diesem Feld steht nicht etwa die Anrede (Herr, Frau usw.) als Text drin sonder ein Wert zwischen 0 und 2. Diesen müßte ich beim erzeugen des Serienbriefs wie folgt interpretieren:

0 = Es wird nichts ausgegeben
1 = Es wird Herr ausgegeben
2 = Es wird Frau ausgegeben

Als wäre das nicht schon genug muß ich das Feld [Anrede] weiter unten erneut interpretieren um daraus einen Anredentext abzuleiten. Hier müßte ich wie folgt vorgehen:

0 = Sehr geehrte Damen und Herren
1 = Sehr geehrter Herr
2 = Sehr geehrte Frau

Ich weiß, sind viele Fragen auf einmal.


(ganze Adressen in einem LOB speichern - skandalös!) Ich bin leider, oder GOTT sei dank, nicht der Datenbankentwickler sondern nur das arme Sch**** das mit den Daten arbeiten soll.

Gruß Pixel

LKH
02.12.03, 16:29
Hi,

ok, dann bin ich mal tierlieb zu dem armen Sch****. :D

Am besten ist du schaltest vorher mal die Ansicht der Feldfunktionen ein (Ansicht -> Feldfunktionen). Dann siehst du die Datenbankfelder grau unterlegt in der Form "datenbank.tabelle.feld".

Die Ausgabe kannst du über "bedingten Text" steuern (Einfügen -> Feldbefehle -> Andere -> Funktionen -> Bedingter Text). Ist jetzt z.B. kein Ansprechpartner vorhanden und soll die Ausgabe unterdrückt werden, dann gibst du dazu folgendes in die Maske ein:

Bedingung: NOT db.tabelle.ansprechpartner oder db.tabelle.ansprechpartner EQ ""
Dann: ""
Sonst: z.Hd. db.tabelle.ansprechpartner

Ob "NOT" oder "EQ "" " hängt davon ab, ob das Feld mit NULL oder NOT NULL angelegt wurde.
Damit keine leeren Absätze entstehen u.U. noch mit dem Feldbefehl "versteckte Absätze" operieren.

Hoffe es hilft,

pixel
02.12.03, 17:06
Hi,

danke für die Infos. Habe den ganzen Mittag daran herumgebastelt und hatte auch in der Hilfe das mit dem bedingten Text gefunden. Das klappt auch schon alles prima.

Das Ganze birgt lediglich noch ein Problem. Die erste beiden Felder die ich für die Adresse verwende sind ja

[Firmenbezeichnung]
[Name]

so, wenn nun das Feld [Firmenbezeichnung] leer ist wird trotzdem eine Leerzeile erzeugt. Das müsste ich irgendwie unterbinden. Gleiche Problematik tritt zwischen Name und Strasse auf. Ist ein Ansprechpartner vorhanden klappt alles. Ist jedoch keiner vorhanden habe ich auch hier eine zusätzliche Leerzeile. Kann ich das irgendwie unterbinden bzw. Sprungmarken setzen?

Gruß Pixel

LKH
03.12.03, 11:50
Hi Pixel,

das mit den Absätzen schrieb ich bereits: die Lösung heisst "versteckte Absätze". Dazu gehst du z.B. so vor:

in der Zeile mit dem DB-Feld "Firmenbezeichnung" fügst du einen versteckten Absatz ein (Einfügen -> Feldbefehl -> Andere -> Funktionen -> versteckter Absatz. Bei Bedingung schreibst du rein, wann der Absatz versteckt werden soll, also z.B. "NOT db.tabelle.firmenbezeichnung". Ist das Feld dann leer, wird der Absatz (d.h. in dem Fall die Zeile) versteckt, also nicht angezeigt/ausgedruckt.

Hoffe es hilft,

nunja
03.12.03, 15:45
@ pixel:

Deine erste Frage kann wahrscheinlich wie folgt beantwortet werden:

Unter der Auswahl "Extras" in der oberen Menüleiste gehst Du auf "Datenquellen".
Dort suchst Du die eingebundene Datenbank aus uns markierst diese falls Du mehrere hast.
Auf der rechten Seite gibt es die Reiter "Allgemein ....... Verknüpfungen".
Hier aktivierst Du den Reiter rechts neben "Allgemein" (könnte heißen "dBase, JDBC, ODBC , .... - je nachdem wie die Datenbank eingebunden ist).
Hier gibt es die Auswahl "Zeichensatz" diese kannst Du auf "IBMPC (850) / DOS" oder "IBMPC (437)" usw. stellen.
Auf diese Art habe ich zum Beispiel tadellos die Datenbank der Telefon-CDs von rosa T von Windows eingebunden, selbst die Umlaute werden korrekt dargestellt und genutzt.

Hoffe das hat etwas geholfen.

pixel
03.12.03, 15:58
vielen vielen Dank. Hat geklappt :)

pixel
03.12.03, 16:57
Hi,


Hier gibt es die Auswahl "Zeichensatz" diese kannst Du auf "IBMPC (850) / DOS" oder "IBMPC (437)" usw.Das werde ich nachher mal probieren und sagen ob's geklappt hat.

Das mit dem versteckten Absatz hat beim ersten Feld (Firmenbezeichnung) funktioniert. Bei der Anrede Funktioniert es komischerweise nicht.

Wie oben beschrieben enthält das Feld 'Anrede' entweder den Wert 0, 1 oder 2. Dies muß ich dann später interpretieren. Das mache ich jedoch später.

Also habe ich einfach mal in der Zeile einen versteckten Absatz mit der Bedingung ANREDE == 0 geschrieben und direkt dahinter Das Datenbankfeld 'Anrede' eingefügt um zu sehen was er macht. Das Ergebnis ist seltsam. Bei Datensätze die im Feld Anrede ein 1 oder eine 2 enthalten schreibt er logischer weise 1 oder 2 hin. Bei Datensätze die in diesem Feld eine 0 haben druckt er nichts, macht jedoch eine Leerzeile.

Hat jemand eine Idee woran das liegen könnte?

Gruß Pixel

pixel
03.12.03, 17:41
Hi,

ich habe herausgefunden warum er trotzdem die Leerzeile macht. Die Felder sind alle richtig. Ich muss nachdem ich die Felder bzw. die Bedingungen eingefügt habe unter Ansicht die versteckten Äbsätze deaktivieren.
Habe ich dann einmal den Seriendruck ausgeführt kann ich es wieder einschalten und es funktioniert trotzdem. Wird wohl ein Bug sein. Wenn man's weiß kann man mit leben.

Nun habe ich aber ein weiteres und hoffentlich das letzte Problem. Ich muß den Anredentext ableiten und diesen mit dem Datenbankfeld 'Ansprechpartner' kombinieren. Ich versuch's mal zu beschreiben.

Wenn im Feld Anrede der Wert 0 steht ist das Feld 'Anprechpartner' leer. Dann soll er schreiben "Sehr geehrte Damen und Herrn". Steht im Feld Anrede der Wert 1 ist im Feld 'Ansprechpartner' der Name des mänlichen Ansprechpartners drin. Dann soll er schreiben. "Sehr geehrter Herr [Ansprechpartner]. Steht im Feld Anrede der Wert 2 ist im Feld 'Anprechpartner' der Name des weiblichen Ansprechpartners eingetragen. Dann soll er schreiben. Sehr geehrte Frau [Ansprechpartner]

Ich habe versucht das ganze so zu lösen: In der Zeile wo der Anredentext stehen soll habe ich zuerst einen bedingten Text eingefügt. Als Bedingung habe ich geschrieben 'ANREDE eq 0' und als Dann "Sehr geehrte Damen und Herrn". Diekt dahinter schreibe ich den nächsten bedingten Text mit Bedingung 'ANREDE eq 1' unter Dann schreibe ich "Sehr geehrter Herr" ????
Wie kann ich nun in der Zeile 'Dann' zu dem Text den er drucken soll noch ein Datenbankfeld eingeben also "Sehr geehrter Herr" ANSPRECHPARTNER.

Egal wie ich es eingebe er schreibt immer das Wort 'Ansprechpartner' und nicht den Inhalt hin. Weiß jemand wie das geht?

Ich hoffe das war halbwegs verständlich.

Gruß Pixel

LKH
04.12.03, 22:01
Hi,

mit db.table.field gehts nicht?