Werte aus Abfrage in Writer übergeben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

masl
Beiträge: 3
Registriert: Do, 06.01.2011 14:05

Werte aus Abfrage in Writer übergeben

Beitrag von masl » Do, 06.01.2011 14:16

Hallo,

ich bin neu hier, habe bis vor ein paar Tagen so gut wie nie mit Base gearbeitet, aber bisher gut mit Learning by Doing und google vorran gekommen.
Nun stehe ich aber vor einem größeren Problem das ich bisher nicht lösen konnte oder bei google nicht so richtig wusste nach was ich suchen soll.

Mein Problem:

Ich habe 2 Tabellen aus einem mysql Server auf die Base zugreift:

kunden
transporte

Die ich in einer Abfrage zusammenführe um daraus im Writer mit der Seriendruckfunktion eine Rechnug erzeuge.
Daten werden über ein Formular erfasst/bearbeitet.
Soweit klappt das auch alles super und ohne probleme.

Was ich nun machen möchte und daran scheitere:

In meinem Formular möchte ich eine Schaltfläche die ein Script ausführt dass dem Writer sagt, er soll die Daten aus der Abfrage mit der entsprechenden ID in die im Writer-Dokument vorhandenen Felder schreiben.

Gibts hier schon eine Lösung, ein Workaround oder kann mir jemand sagen wie ich es am gescheitesten anstelle?

Liebe Grüße

Marcel

gogo
*****
Beiträge: 206
Registriert: Mi, 10.11.2010 13:11

Re: Werte aus Abfrage in Writer übergeben

Beitrag von gogo » Do, 06.01.2011 16:15

Falsche Richtung ;)

in Base: Abfrage erstellen in der der/die für den Ausdruck gewünschten Datensätze drin sind

Dann: Writer Dokument öffnen, [F4] drücken und aus den angezeigten Datenquellen die gewünschten Daten als Feld in das Writerdokument einfügen (Drag&Drop der Zeilenüberschrift)

...

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5

masl
Beiträge: 3
Registriert: Do, 06.01.2011 14:05

Re: Werte aus Abfrage in Writer übergeben

Beitrag von masl » Fr, 07.01.2011 11:00

ja soweit bin ich auch schon :P

ich wollts nur etwas komfortabler dass ich mit einem script mir das F4 drücken und datensätze auswählen sparen kann.
Also dass vom Formular über eine Schaltfläche die Variable "ID" an den Writer übergeben wird und dieser den Datensatz aus der Abfrage auswählt und in die Textfelder einsetzt.

masl
Beiträge: 3
Registriert: Do, 06.01.2011 14:05

Re: Werte aus Abfrage in Writer übergeben

Beitrag von masl » Fr, 07.01.2011 11:05

Sorry dein "Falsche Richtung" zu spät gelesen :shock:

hm... also ist es nicht möglich? doof. okay muss ich mich wohl mit abfinden.

Mit dem Report Builder kann man ja leider nicht so schön am Layout basteln wie im Writer

gogo
*****
Beiträge: 206
Registriert: Mi, 10.11.2010 13:11

Re: Werte aus Abfrage in Writer übergeben

Beitrag von gogo » Fr, 07.01.2011 14:29

"falsche Richtung" heisst nicht, dass es nicht geht, sondern, dass nicht Base dem Writer sagt wo die Daten sind, sondern dass der Writer die Daten selbst holen kann, und zwar aus jeder im System registrierten Datenbank!

Damit nicht die ganze Abfrage in Deinem Serienbrief landet musst Du in der Abfrage die Daten weiter einschränken ... z.B. ein Ja/Nein Feld das für die zu druckenden Daten auf "true" steht, oder Du generierst immer nur für den Ausdruck eine temporäre Tabelle mit den entsprechenden Daten. Auf diese Tabelle/Abfrage/View... beziehen sich dann die Felder im Writerdokument, das Du dann mit

Code: Alles auswählen

sURL = convertToUrl("Pfad zum Writerdokument das Du öffnen willst")
Doc = starDeskTop.loadComponentFromUrl (sURL, "_blank", 0, Array())
aus Base heraus öffnen kannst...

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5

Gast

Re: Werte aus Abfrage in Writer übergeben

Beitrag von Gast » Mo, 06.02.2012 21:47

hiho,

das gleich problem habe ich auch und suche mir grade einen wolf...

ich möchte aus einem base-formular eine writervorlage öffnen und die aktuellen daten aus dem bereits geöffneten base-formular an die writervorlage übertragen. ein seriendruck ist dabei nicht erforderlich.

dieses funktioniert im writer natürlich auch über den datenbankexplorer, mittels dem die daten abgerufen und eingefügt werden können. es wäre jedoch viel einfacher die daten direkt aus dem base-formular zu übertragen, denn über den datenbankexplorer im writer müsste ich mir die gewünschten daten aus dem base-formular erst wieder heraussuchen bzw. das einfügen anstoßen. genau diesen umstand würde ich gerne umgehen.

vielleicht hat jemand noch einen tipp, ich wäre sehr dankbar!

lg micha

ps: ich fange bzgl. makros gerade erst an...

gogo
*****
Beiträge: 206
Registriert: Mi, 10.11.2010 13:11

Re: Werte aus Abfrage in Writer übergeben

Beitrag von gogo » Di, 07.02.2012 07:42

Wohin sollen denn welche Art von Daten aus Base=>Writer?
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5

F3K Total
********
Beiträge: 3213
Registriert: Mo, 28.02.2011 17:49

Re: Werte aus Abfrage in Writer übergeben

Beitrag von F3K Total » Mi, 08.02.2012 22:05

Hallo,
per Makro geht es, habe ich schon gemacht.
1.) aktuelles Formular ansprechen, z.B.

Code: Alles auswählen

oform=thiscomponent.drawpage.forms.MainForm
2.) Primarykey (ID) des aktuell selektierten Datensatzes auslesen, z.B mit

Code: Alles auswählen

nColumnID = oform.findcolumn("ID")
nid = oform.getint(nColumnID)'nid enthält jetzt die aktuelle ID 
3.) Mailemerge auf Sereinbrief durchführen, mit nur einem Datensatz:

Code: Alles auswählen

MailMerge = createunoservice("com.sun.star.text.MailMerge")
MailMerge.DataSourceName = "meineDatenbank"
MailMerge.DocumentURL = "URL zum Serienbriefdokument"
Mailmerge.SaveAsSingleFile = 0
MailMerge.CommandType = 0
MailMerge.Command = "meine Tabelle"
MailMerge.Filter = "ID ="+nid'Dies ist die wichtige Zeile, hier wird die ID aus dem Formular an Mailmerge übergeben!!!
MailMerge.SaveAsSingleFile = true
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Tabellenspalte"
MailMerge.OutputType = 2
MailMerge.OutputUrl = "URL zum Ausgabeordner"
Dim MyProps()
MailMerge.execute(MyProps())
Viel Erfolg
Gruß R

DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Werte aus Abfrage in Writer übergeben

Beitrag von DPunch » Mi, 08.02.2012 23:00

Servus

Um mal eine Alternative aufzuzeigen, die sich bei meiner Arbeit absolut bewährt hat:

a) Writer-Vorlage erstellen
b) Einfügen -> Feldbefehl -> Andere -> Platzhalter
c) Den Platzhalter so nennen, wie die entsprechende Spalte in der Tabelle / in der Abfrage heisst, deren Inhalt der Platzhalter annehmen soll (für einfache Zwecke einfach nur "Text" als Typ wählen, mit den anderen Varianten, z.B. "Grafik" kann man dann fortgeschrittenere Sachen umsetzen)
d) In einem Makro Pfad zur Vorlage hinterlegen und vom Makro die Platzhalter befüllen lassen

Einfaches Beispiel ist angehängt (beide im gleichen Ordner speichern, über die Schaltfläche in Formular1 die Daten des aktuellen Datensatzes in die erstellte Vorlage schreiben).
Dateianhänge
VorlagePlaceholderDatenbank.odb
(13.52 KiB) 576-mal heruntergeladen

[Die Dateierweiterung ott wurde deaktiviert und kann nicht länger angezeigt werden.]


MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Re: Werte aus Abfrage in Writer übergeben

Beitrag von MEcki » Mi, 16.05.2012 22:13

Hallo F3K Total,

ich habe das ganze an meiner Datenbank mal nach Deinem Code ausgetestet.
Wenn ich

Code: Alles auswählen

MailMerge.OutputType = 1
setze, gibt er mir alle im Seriendokument angesprochenen Datenbankfelder aus.

Bei

Code: Alles auswählen

MailMerge.OutputType = 2
kommt in der Zeile

Code: Alles auswählen

MailMerge.execute(MyProps())
Basic-Laufzeitfehler
Es ist eine Exception aufgetreten
Type com.sun.star.uno.exception
Message: Mail merge failed. Sorry, no further information available.


Insgesamt sieht das Modul bei mir also so aus:

Code: Alles auswählen

oform=thiscomponent.drawpage.forms.MainForm
    
    nColumnID = oform.findcolumn("ID_Mitglied")
    nid = oform.getint(nColumnID)'nid enthält jetzt die aktuelle ID 
    
    MailMerge = createunoservice("com.sun.star.text.MailMerge")
    MailMerge.DataSourceName = "FGGM_DB"
    MailMerge.DocumentURL = "file:///C:/Daten/FGGM/Förderverein/testbrief.odt"
    Mailmerge.SaveAsSingleFile = 0
    MailMerge.CommandType = 0
    MailMerge.Command = "Mitglieder"
    MailMerge.Filter = "ID_Mitglied ="+nid'Dies ist die wichtige Zeile, hier wird die ID aus dem Formular an Mailmerge übergeben!!!
    MailMerge.SaveAsSingleFile = true
    MailMerge.FileNameFromColumn = true
    MailMerge.Filenameprefix = "Tabellenspalte"
    MailMerge.OutputType = 2
    MailMerge.OutputUrl = "file:///C:/Temp/"
    Dim MyProps()
Hast Du (oder sonst jemand) eine Ahnung, woran's liegen könnte?


Danke

MEcki

F3K Total
********
Beiträge: 3213
Registriert: Mo, 28.02.2011 17:49

Re: Werte aus Abfrage in Writer übergeben

Beitrag von F3K Total » Mi, 16.05.2012 22:32

Hallo Mecki,
so auf den ersten Blick kann ich keinen Fehler erkennen, kannst Du Beispieldokumente hochladen (verfremdet)
Gruß R

Edit: Welcher Version OOo hast Du?

MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Re: Werte aus Abfrage in Writer übergeben

Beitrag von MEcki » So, 20.05.2012 17:31

Hallo FK3 Total,

OOO Version war 3.0.0. habe dann versucht auf ApacheOffice 3.4 zu aktualisieren, was mir aber mein Formular total zerschossen hat.
Daher habe ich jetzt (nur)auf OOO 3.3.0 aktualisiert (Hilfe > über ... ) zeigt 3.0.0 an, aber OOO330m20 (Build 9567).

Beispieldateien habe ich zusammengebaut (Nur eine einfache Mitgliedertabelle und ein Formular mit einer Schaltfläche, hinter der Dein Macro steckt.

Der Einfachheit halber beides in C:\Temp gespeichert.

MailMerge.OutputType = 1 -> Auf Drucker -> funktioniert.

MailMerge.OutputType = 2 -> Dokument -> Fehlermeldung


Danke
MEcki
Dateianhänge
BriefAnDatensatz.odt
Seriendokument
(8.65 KiB) 247-mal heruntergeladen
BriefAnDatensatz.odb
Datenbank
(13.43 KiB) 225-mal heruntergeladen

F3K Total
********
Beiträge: 3213
Registriert: Mo, 28.02.2011 17:49

Re: Werte aus Abfrage in Writer übergeben

Beitrag von F3K Total » So, 20.05.2012 21:18

Hi,
ich habs gefunden, die Zeilen:

Code: Alles auswählen

    MailMerge.FileNameFromColumn = true
    MailMerge.Filenameprefix = "Tabellenspalte"
müssen zueinander passen, wenn Du einen Prefix im Dateinamen willst, dann brauchst du auch eine Tabellenspalte, die diesen definiert. In deinem Fall müsste es also, wenn du den Nachnamen als Prefix verwenden möchtest, so lauten:

Code: Alles auswählen

    MailMerge.FileNameFromColumn = true
    MailMerge.Filenameprefix = "Name"
Gruß und viel Erfolg,
R
Edit:
MEcki hat geschrieben:OOO Version war 3.0.0. habe dann versucht auf ApacheOffice 3.4 zu aktualisieren, was mir aber mein Formular total zerschossen hat.
Das ist darauf zurückzuführen, dass 3.4 Formulare im Print-Layout und nicht wie vorher im Web-Layout, öffnet, ein Bug. LO hat den BUG in Version 4.6 bereits wieder eleminiert, das er bei OOo jetzt auftritt ist echt Mist. Mit diesem Makro, eingebaut im Formularentwurfsmodus unter Extras/Anpassen/ "Ansicht wurde erzeugt" bekommst du deine gewohnte Ansicht zurück. Speichern (Formular und DB-Dokument) nicht vergessen!

Code: Alles auswählen

sub swap_to_Weblayout
 odoc = ThisComponent
 oCurrentController = odoc.CurrentController
 oViewSettings = oCurrentController.ViewSettings
 oViewSettings.ShowOnlineLayout = true
end sub

MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Re: Werte aus Abfrage in Writer übergeben

Beitrag von MEcki » Mo, 21.05.2012 09:39

Hallo F3K Total,

besten Dank für Deine Hilfe. Funktioniert bestens. Nachdem ich mit der Funktion etwas für unsere Schriftführerin einbauen wollte, kommen mir da völlig neue Ideen, um auch mir das Leben mal wieder etwas zu erleichtern. (Versendung von Rechnungen (PDF-Anhang) per email über ein Makro). Die wären dann aber wahrscheinlich einen eigenen Beitrag wert.
Die Fragestellung, ob ApacheOffice oder LibreOffice ist sicherlich auch eher woanders zu klären. Deinen Codepart zur Formularanzeige versuche ich dann bei Gelegenheit.

Was meinen Teil angeht, wäre somit die eigentliche Frage von masl umfassend beantwortet :-)

MEcki

Freischreiber

Re: Werte aus Abfrage in Writer übergeben

Beitrag von Freischreiber » Fr, 04.04.2014 09:40

Hallo Mecki und F3K Total,

da das Makro mich sehr interessiert, habe ich eine Bitte:

Könnte einer von euch eine funktionierende Kombination von Beispieldatenbank und Writerdokument online stellen?

Bei mir läuft das Makro nicht aus diesem Posting:
posting.php?mode=reply&f=8&t=45868#pr201825

Auch nicht mit der Korrektur aus diesem Posting:
posting.php?mode=reply&f=8&t=45868#pr201833
(Änderung von "Tabellenspalte" auf "Name")

Bei mir kommt in LO 4.2.2.1 immer die Fehlermeldung:
"BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Fehler beim Zugriff auf die Datenquelle 'BriefAnDatensatz':
com.sun.star.container.NoSuchElementException:
BriefAnDatensatz."

Vielen Dank und viele Grüße

Freischreiber

Gesperrt