Seite 1 von 1
Feldinhalt über alle Datensätze zu einem String verbinden
Verfasst: Mo, 05.11.2012 21:05
von mgo
Hi,
ich habe eine Tabelle, in der unter anderem die email-Adresse verwaltet ist. Jetzt würde ich gerne alle email Adressen so zu einem einzigen String verbinden, dass ich ihn direkt in das Adressfeld des email-Programms kopieren kann.
Es sollte also aus
a@x.com
b@y.com
c@z.com
a@x.com;
b@y.com;
c@z.com
werden.Ich hätte gesagt, man löst das über einen Bericht, es gelingt mir aber nicht die einzelnen Felder miteinander zu verknüpfen....
Habt ihr eine Idee dazu?
lg Michi
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Verfasst: Mo, 05.11.2012 21:41
von RobertG
Hallo Michi,
Du kannst aus verschiedenen Datensätzen der gleichen Tabelle nur begrenzt komplette Felder in einem Datensatz generieren. Das normale Verfahren dazu besteht in der Durchnummerierung der einen Tabelle zu einem View und der anschließenden Erstellung einer Abfrage mit lauter Subselects. Für Deine Tabelle würde das so aussehen:
View -
Code: Alles auswählen
SELECT "a"."EMail", (SELECT COUNT("ID") WHERE "ID" <= "a"."ID") AS "Nr" FROM "Tabelle" AS "a"
Jetzt hast Du eine Ansicht (View) mit durchnummerierten Datensätzen ab 1 aufwärts - ID sollte vorher der Primärschlüssel sein.
Abfrage -
Code: Alles auswählen
SELECT "EMail"||IFNULL(';'||(SELECT "EMail" FROM "Ansicht" WHERE "Nr"=2),'')||IFNULL(';'||(SELECT "EMail" FROM "Ansicht" WHERE "Nr"=3),'') .... FROM "Ansicht" WHERE "Nr" =1
Du müsstest hier aber genau wissen, wie viele Datensätze denn mindestens vorhanden sind. Geht einmal zu konstruieren z.B. für einen Mailverteiler "Vorstand eines Vereins" - nicht aber "Mitglieder eines Vereins", es sei denn, das sind nicht allzu viele.
Für eine allgemeine Lösung müsstest Du das Ganze über ein Makro bestücken, d.h. jeden Wert aus der Tabelle auslesen und anschließend zu einem gemeinschaftlichen Wert verknüpfen und wieder in eine Tabelle eintragen.
Ansätze dazu sind z.B. im Base-Handbuch von LO zu finden (Verknüpfung zu Datenbanken, Daten aus Tabellen auslesen, neues Verknüpfen, Daten in eine Tabelle einfügen). Das Handbuch findest Du hier:
http://de.libreoffice.org/hilfe-kontakt/handbuecher/ - für das Base-Handbuch etwas nach unten scrollen.
Gruß
Robert
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Verfasst: Mo, 05.11.2012 22:48
von F3K Total
Moin,
anbei ein kleines Beispiel mit einem Makro.
Öffne das Formular Kontakte, markiere gewünschte Einträge in der Spalte export, drücke "Auswahl speichern" dann "EMails verbinden".
Der gewünschte Text erscheint im Textfeld und kann mit strg + C in die Zwischenablage kopiert werden.
Das verwendete Makro sieht so aus:
Code: Alles auswählen
Sub S_Join_Email_Adresses
oform = Thiscomponent.drawpage.forms.MainForm
oform.first
oresult = oform.createresultset
nemailcolumn = oresult.findcolumn("email")'Spaltennummer email auslesen
nexportcolumn = oresult.findcolumn("export")'Spaltennummer export auslesen
dim sEmails(0) as string
i = 0
do
if oresult.getboolean(nexportcolumn) = true then 'Wenn export angehakt
redim preserve sEmails(i)
sEmails(i) = oresult.getstring(nemailcolumn) '...Adresse auslesen
i = i+1
endif
loop while oresult.next
salleEmail = join(sEmails,"; ")'verbinden
otxtEmails = oform.txtEmails
otxtEmails.string = salleEmail
end sub
Dies funktioniert so nur, wenn die Namen der Kontrollelemente und Tabellenspalten dazu passen:
Auf dem Formular:
MainForm
txtEmails
In der Tabelle Kontakte die Spalten
email
export
Viel Erfolg beim Nachvollziehen
Gruß R
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Verfasst: Mo, 05.11.2012 23:25
von mgo
Hi,
@ R: perfekt, genau das habe ich gesucht! Habs angepasst und es funktioniert super!
@all: Danke für Eure Hilfe!
lg Michi
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Verfasst: Di, 06.11.2012 02:10
von komma4
...und jetzt ich noch mit einer Lösung
Ausführen eines SQL-Befehls über
Extras>SQL..., bei der eingebauten HSQLDB bspw.
Code: Alles auswählen
SELECT "spaltenname" INTO TEXT "meineSpalteAlsText" FROM "tabellenname"
[erstellt im Verzeichnis der Datenbank-Datei (*.odb) eine Datei
meineSpalteAlsText.csv]
und dann ersetzen des Zeilenumbruchs pro Zeile durch Semikolon (unter Linux)
Code: Alles auswählen
cat meineSpalteAlsText.csv | tr '\n' ';' > meineSpalteAlsTextHintereinander
Kein Makro, keine umständlichen SQL-Befehle
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Verfasst: Di, 06.11.2012 10:42
von Rocko
Zu guter Letzt (?) eine ganz einfache Lösung mit der Serienbrieffunktion ...
Erstelle ein leeres Writerdokument und öffne mit F4 die Datenbank mit deinen Emails. Dann ziehst du mit der Maus den Spaltenkopf der Mails ins Dokument, fügst danach einen Feldbefehl "Nächster Datensatz" mit Semikolon und Leerzeichen ein. Markiere die Eingabe und kopiere sie sooft, wie du sie brauchst. (Lässt sich auch gruppenweise kopieren.)
Wenn dich die Feldbefehle dann stören sollten: Einfach markieren, ausschneiden und als unformatierten Text an derselben Stelle wieder einfügen.