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
Feldinhalt über alle Datensätze zu einem String verbinden
Moderator: Moderatoren
Re: Feldinhalt über alle Datensätze zu einem String verbinde
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 -
Jetzt hast Du eine Ansicht (View) mit durchnummerierten Datensätzen ab 1 aufwärts - ID sollte vorher der Primärschlüssel sein.
Abfrage -
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
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"
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
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
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:
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
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
Auf dem Formular:
MainForm
txtEmails
In der Tabelle Kontakte die Spalten
export
Viel Erfolg beim Nachvollziehen
Gruß R
- Dateianhänge
-
- Multi_Email_String.odb
- (24.51 KiB) 89-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Feldinhalt über alle Datensätze zu einem String verbinde
Hi,
@ R: perfekt, genau das habe ich gesucht! Habs angepasst und es funktioniert super!
@all: Danke für Eure Hilfe!
lg Michi
@ R: perfekt, genau das habe ich gesucht! Habs angepasst und es funktioniert super!
@all: Danke für Eure Hilfe!
lg Michi
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Feldinhalt über alle Datensätze zu einem String verbinde
...und jetzt ich noch mit einer Lösung
Ausführen eines SQL-Befehls über Extras>SQL..., bei der eingebauten HSQLDB bspw.
[erstellt im Verzeichnis der Datenbank-Datei (*.odb) eine Datei meineSpalteAlsText.csv]
und dann ersetzen des Zeilenumbruchs pro Zeile durch Semikolon (unter Linux)
Kein Makro, keine umständlichen SQL-Befehle

Ausführen eines SQL-Befehls über Extras>SQL..., bei der eingebauten HSQLDB bspw.
Code: Alles auswählen
SELECT "spaltenname" INTO TEXT "meineSpalteAlsText" FROM "tabellenname"
und dann ersetzen des Zeilenumbruchs pro Zeile durch Semikolon (unter Linux)
Code: Alles auswählen
cat meineSpalteAlsText.csv | tr '\n' ';' > meineSpalteAlsTextHintereinander
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Feldinhalt über alle Datensätze zu einem String verbinde
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.
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.
Hast du schon mal einen Blick in die Writer-FAQ und in die Calc-FAQ des Forums geworfen?
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/