Feldinhalt über alle Datensätze zu einem String verbinden

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Feldinhalt über alle Datensätze zu einem String verbinden

Re: Feldinhalt über alle Datensätze zu einem String verbinde

von Rocko » Di, 06.11.2012 10:42

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.

Re: Feldinhalt über alle Datensätze zu einem String verbinde

von komma4 » Di, 06.11.2012 02:10

...und jetzt ich noch mit einer Lösung 8)

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

von mgo » Mo, 05.11.2012 23:25

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

von F3K Total » Mo, 05.11.2012 22:48

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
Dateianhänge
Multi_Email_String.odb
(24.51 KiB) 90-mal heruntergeladen

Re: Feldinhalt über alle Datensätze zu einem String verbinde

von RobertG » Mo, 05.11.2012 21:41

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

Feldinhalt über alle Datensätze zu einem String verbinden

von mgo » Mo, 05.11.2012 21:05

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

Nach oben