Mailmerge - SQL direkt übergeben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Mailmerge - SQL direkt übergeben

Beitrag von Stephan »

Hallo,

Programm: LO 6.0.3, Windows
Datenbank: interne HSQLDB

ich verwende folgenden Code:

Code: Alles auswählen

	Dim oMailMerge as Object
	oMailMerge = CreateUnoService("com.sun.star.text.MailMerge")
	oMailMerge.DocumentURL =  ConvertToUrl("D:\seriendrucktest_test.odt")
	oMailMerge.DataSourceName =  "Adressdatenbank"
	oMailMerge.CommandType = 2
	oMailMerge.Command = "SELECT * FROM ""Firma"" WHERE ""FID"" = '13'"
	oMailMerge.OutputType = com.sun.star.text.MailMergeType.FILE
	oMailMerge.OutputUrl = Converttourl("D:\SD_test\")
	oMailMerge.FileNamePrefix = "Dateiname"
	oMailMerge.SaveAsSingleFile = True
	oMailMerge.execute(Array())
	oMailMerge.dispose()
Was ist an:

Code: Alles auswählen

oMailMerge.CommandType = 2
oMailMerge.Command = "SELECT * FROM ""Firma"" WHERE ""FID"" = '13'"
Falsch?

Auffällig ist das die richtige Anzahl an Seriendruckdokumenten erzeugt wird, nur die Stellen der Seriendruckfelder leer bleiben. Eigentlich würde das darauf hindeuten das ich im Dokument "seriendrucktest_test.odt" falsche Seriendruckfelder eingefügt habe, aber wie soll ich diese anders angeben als über die Datentabelle? Lässt man sich im Dokument die Felder anzeigen (Ansicht-Feldnamen), steht da natürlich (z.B.):

Adressdatenbank.Firma.Firmenname

Obiger Code funktioniert prima wenn ich dieselbe Abfrage direkt in der Datenbank definiere, dort also:

SELECT * FROM "Firma" WHERE "FID" = '13'

und dann die Abfrage im Makro angebe:

Code: Alles auswählen

oMailMerge.CommandType = 1
oMailMerge.Command = "MeineAbfrage"



Gruß
Stephan
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mailmerge - SQL direkt übergeben

Beitrag von RobertG »

Hallo Stephan,

das sieht mir so aus, als ob die Namen der Felder nicht korrekt übertragen werden. Der Weg ist ja grundsätzlich in Ordnung. Der SQL-Befehl müsste auch Datensätze mit dem entsprechenden Feldnamen rausgeben.

Ich würde das einmal mit lediglich einem Feldnamen genauer testen, also z.B. mit

Code: Alles auswählen

"SELECT ""Firmenname"" FROM ""Firma"" WHERE ""FID"" = '13'"
Du hast schon recht, der Code von SQL und Abfrage unterscheidet sich bei Dir nicht.

Gruß

Robert
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mailmerge - SQL direkt übergeben

Beitrag von Stephan »

Hallo Robert,
Ich würde das einmal mit lediglich einem Feldnamen genauer testen, also z.B. mit [...]
genau die gleiche Reaktion, es wird die richtige Anzahl an Dokumente erzeugt, die Stellen mit den Seriendruckfeldern sind jedoch leer.

Ich habe aber einen Workaround gefunden, wenn ich die Tabelle angebe und die FID in den zusätzlichen Filter nehme klappt alles:

Code: Alles auswählen

'...
oMailMerge.CommandType = 0
oMailMerge.Command = "Firma"
oMailMerge.Filter = """FID""='13'"
'...
Problem bleibt das ich mir weiter nicht sicher bin ob das andere ein Fehler in LO ist oder ich etwas falsch mache. In OO habe ich es nur orientierend geprüft da geht es in 4.x auch nicht, aber auch im Internet finde ich nirgends ein Beispiel oder einen Hinweis.


btw., vielleicht darf ich noch Folgende Dinge fragen:

(a)
Kennst Du einen Weg mit dem ThisComponent-Object (offene, ungespeicherte Datei) direkt ein Mailmerge zu machen?

(b)
Ist es irgendwie möglich aus dem Mailmerge heraus die Texte zu bekommen die an Stelle der Feld befehle geschrieben werden? Es geht nicht oder sogar weniger um Seriendruckfelder sondern um Felder mit bedingten Text basierend auf Abfragen von Seriendruckfeldern, denn ich weiß nicht wie ich per Makro solche Felder direkt auswerten könnte (die Bedingung im Feld kann völlig beliebig sein!) .

Ja, bei beiden Fragen habe ich schon einen Workaround im Kopf, aber das ist beide Male 'grausam'.

Eigentlich will ich nur erreichen:
basierend auf Seriendruckvorlage wird ein Seriendruck mit immer genau einem Datensatz gemacht und das Dokument sollte danach offen und ungespeichert sein.
(im Basic-Forum hatte ich schon geäußert das man evt. mit Dispatcher an Ansicht-Datenquellen-Daten in Felder 'rankommt', aber das ist doch auch wieder ein furchtbarer Workaround)


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mailmerge - SQL direkt übergeben

Beitrag von Stephan »

und alles umsonst ...

Was unter LO 6.0.3 Windows funktioniert, funktioniert nicht unter UBUNTU und LO 6.3.3. Lediglich Seriendruckfelder werden gefüllt, Bedingungsfelder werden nicht übernommen.

Die Qualität von LO ist ein unendlicher Horror ... seit 6.0.3 bis jetzt nicht eine LO-Version unter UBUNTU wo mein DB-Projekt komplett fehlerfrei läuft. Nicht beschweren kann ich mich über das recht schnelle Reagieren zu Bugmeldungen, aber was hilft das wenn am Ende die Qualität nicht stimmt ...


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mailmerge - SQL direkt übergeben

Beitrag von Stephan »

nein, doch nicht ...

der Fehler unter UBUNTU LO 6.3.3 geht zurück auf eine fehlerhafte Vorlagendatei. Die im angehängten Screenshot (Content.xml der *.ott) sichtbaren Einträge stören die Funktion der Bedingungsfelder.


Gruß
Stephan
Dateianhänge
FehlerhafteFeldbefehle.gif
FehlerhafteFeldbefehle.gif (55.66 KiB) 5720 mal betrachtet
Antworten