Werte aus Abfrage in Writer übergeben
Moderator: Moderatoren
Werte aus Abfrage in Writer übergeben
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
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
Re: Werte aus Abfrage in Writer übergeben
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

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
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
ja soweit bin ich auch schon 
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.

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.
Re: Werte aus Abfrage in Writer übergeben
Sorry dein "Falsche Richtung" zu spät gelesen
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

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
Re: Werte aus Abfrage in Writer übergeben
"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
aus Base heraus öffnen kannst...
g
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())
g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
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...
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...
Re: Werte aus Abfrage in Writer übergeben
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
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Re: Werte aus Abfrage in Writer übergeben
Hallo,
per Makro geht es, habe ich schon gemacht.
1.) aktuelles Formular ansprechen, z.B.
2.) Primarykey (ID) des aktuell selektierten Datensatzes auslesen, z.B mit
3.) Mailemerge auf Sereinbrief durchführen, mit nur einem Datensatz:
Viel Erfolg
Gruß R
per Makro geht es, habe ich schon gemacht.
1.) aktuelles Formular ansprechen, z.B.
Code: Alles auswählen
oform=thiscomponent.drawpage.forms.MainForm
Code: Alles auswählen
nColumnID = oform.findcolumn("ID")
nid = oform.getint(nColumnID)'nid enthält jetzt die aktuelle ID
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())
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 7: OOo, AOO, LO Linux Mint: OOo, AOO, LO
Re: Werte aus Abfrage in Writer übergeben
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).
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) 550-mal heruntergeladen
-
[Die Dateierweiterung ott wurde deaktiviert und kann nicht länger angezeigt werden.]
Re: Werte aus Abfrage in Writer übergeben
Hallo F3K Total,
ich habe das ganze an meiner Datenbank mal nach Deinem Code ausgetestet.
Wenn ich
setze, gibt er mir alle im Seriendokument angesprochenen Datenbankfelder aus.
Bei
kommt in der Zeile
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:
Hast Du (oder sonst jemand) eine Ahnung, woran's liegen könnte?
Danke
MEcki
ich habe das ganze an meiner Datenbank mal nach Deinem Code ausgetestet.
Wenn ich
Code: Alles auswählen
MailMerge.OutputType = 1
Bei
Code: Alles auswählen
MailMerge.OutputType = 2
Code: Alles auswählen
MailMerge.execute(MyProps())
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()
Danke
MEcki
Re: Werte aus Abfrage in Writer übergeben
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?
so auf den ersten Blick kann ich keinen Fehler erkennen, kannst Du Beispieldokumente hochladen (verfremdet)
Gruß R
Edit: Welcher Version OOo hast Du?
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 7: OOo, AOO, LO Linux Mint: OOo, AOO, LO
Re: Werte aus Abfrage in Writer übergeben
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
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) 232-mal heruntergeladen
-
- BriefAnDatensatz.odb
- Datenbank
- (13.43 KiB) 213-mal heruntergeladen
Re: Werte aus Abfrage in Writer übergeben
Hi,
ich habs gefunden, die Zeilen:
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:
Gruß und viel Erfolg,
R
Edit:
ich habs gefunden, die Zeilen:
Code: Alles auswählen
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Tabellenspalte"
Code: Alles auswählen
MailMerge.FileNameFromColumn = true
MailMerge.Filenameprefix = "Name"
R
Edit:
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!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.
Code: Alles auswählen
sub swap_to_Weblayout
odoc = ThisComponent
oCurrentController = odoc.CurrentController
oViewSettings = oCurrentController.ViewSettings
oViewSettings.ShowOnlineLayout = true
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 7: OOo, AOO, LO Linux Mint: OOo, AOO, LO
Re: Werte aus Abfrage in Writer übergeben
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
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
Re: Werte aus Abfrage in Writer übergeben
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
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