Hallo liebe Community,
habe folgende Frage:
In einer Spalte der Tabelle_1 sollen die Daten aus drei Spalten der Tabelle_2 erscheinen.
Habe versucht es ohne SQL-Abfrage zu gestalten, habe es nicht hinbekommen.
Das Problem ist, dass es in der Tabelle_2 mehrere Zeilen mit den passenden Suchparameter gibt, und sie sollen alle mit dem Semikolon getrennt in der Tabelle_1 zu sehen sein.
Versuche es schematisch darzustellen:
So sieht die Tabelle_2 aus:
|Spalte1|Spalte2|Spalte3| Spalte4 |
| A | B | C |Suchparameter|
| D | E | F |Suchparameter|
usw.
Es sollen alle drei Parameter, die dem Suchparameter von der Spalte4 entsprechen, in die Tabelle_1 in einem Feld (z.B. Spalte3) da sein, und zwar so:
Tabelle_1
|Spalte1|Spalte2| Spalte3 |
| ... | ... |A_B_C;D_E_F; usw.|
Bitte um eure Hilfe!
Beste Grüße
dddt1
Hallo,
ohne eine VBA Funktion als Subquery wir das nicht möglich sein. Hier ein Lösungsansatz aus dem alten DBWiki:
https://web.archive.org/web/20170302110003/http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen (https://web.archive.org/web/20170302110003/http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen)
Gruß Knobbi38
Guten Morgen Knobbi38,
danke für schnelle Antwort!
Den Link habe ich angeschaut.
Bei mir sollte ich generierte Zeichenkette in eine Tabelle einbringen, und nicht ins ein Formularfeld, wie es im Beispiel steht.
Wie funktioniert es?
dddt1
Hallo,
das in dem Link ist doch nur ein Beispiel, wie man diese Funktion verwenden könnte, nicht muß.
Diese Funktion kannst du als Subselect in einer SQL Anweisung für deine Tabelle1 gebrauchen:
SELECT feld1, feld2, SQLListe(...)
FROM Tabelle1
Gruß Knobbi38
Guten Morgen knobbi,
Funktion vom Link funktioniert einfach glänzend, hatte sie etwas anagepasst und ich habe den korrekten String, den ich haben möchte.
Aber der Aufruf im VBA mit der Aktualisierung der Tabelle funktioniert nicht:
StringSQL = "Update Tabelle_1" _
& "SET Feld_1 =(SQLListe (SELECT Feld_1,Feld_2,Feld_3 FROM Tabelle_2 WHERE Suchfeld_der_2.Tabelle='AAA')) " _
& "WHERE Suchfeld_der_1.Tabelle='AAA'"
DoCmd.RunSQL (StringSQl)
Bekomme folgende Fehlermeldung:
(s. Screenshot)
Habe mit EXISTS probiert, aber bekomme immer noch nicht hin :-(
dddt1
Habe das Problem so gelöst, dass der komplette String einer Variable zugewiesen wurde, und dann wurde die abfrage mit der Variable ausgeführt:
Update Tabelle_1
SET Feld_1='" & String_zusammengefuehrt
& "'WHERE Suchfeld_der_1.Tabelle='AAA'"
Beste Grüße
dddt1
Guten Tag Zusammen,
rufe den Topik wieder zum Leben auf, da ich da nicht weiter komme.
Wollte zwei Tabelle miteinander verknüpfen, wo die Daten aus der drei Spalten von Tabelle_2 in einer Spalte der Tabelle_1 angezeigt werden, und zwar nach einem Parameter, der in beiden Tabellen gleich ist:
UPDATE Tabelle_1" _
& "SET Feld_1 =(SQLListe (SELECT Feld_1,Feld_2,Feld_3 FROM Tabelle_2" _
& "WHERE Parameter_gleich.Tabelle_2=Parameter_gleich.Tabelle_1)) " _
& "WHERE Parameter_gleich.Tabelle_2=Parameter_gleich.Tabelle_1
Das Problem ist, dass die Tabelle_2 mehrere Parameter_gleich hat, die sich auch in der Tabelle_1 finden lassen.
Es bedeutet, dass Funktion SQLListe mehrere Ergebnisse in die Tabelle 1 liefern soll.
Genau da liegt der Stolperstein bei mir.
Würdet ihr bitte noch mal helfen?
Beste Grüße
dddt1
Hallo ddd,
ich kann dir leider nicht ganz folgen. Kannst du das Problem nochmal mit anderen Worten beschreiben und eine Beispiel DB hochladen?
Knobbi38
Guten Morgen Knobbi,
ich versuche mit der Beispiel-DB zu schildern:
In die Spalte "Zusammengefügt" der "Tabelle1" sollen die Werte von den Spalten "Wert1", "Wert2", "Wert3" der "Tabelle2" sollen die Daten kommen, die "Werte von der Spalte "Parameter_gleich" identisch haben.
Das heißt, in der Tabelle 1 sollen die Daten wie folgt stehen:
| ID | Zusammengefügt | Parameter_gleich|
| 1 | a_b_c;d_e_f; | A |
| 2 | g_h_i;j_k_l; | B |
| 3 | m_n_o;p_r_s; | C |
Die Funktion "SQLListe" zum Zusammenfügen der Daten funktioniert. Nur die richtige Zuweisung nach "Parameter_gleich" kriege ich momentan nicht hin.
Im angehängten Screenshot ist die Struktur der beiden Tabellen dargestellt.
Beste Grüße
dddt1
Hallo,
mit DB hochladen meinte ich eigentlich eine Datenbank und keine Bilder. Ich habe jetzt nicht vor, die DB bei mir zum Testen nachzustellen. Eine BeispielDB würde also die Bereitschaft zur Hilfe stark erhöhen.
Es könnte evtl. hilfreich sein, die nach den gleichen Daten zu gruppieren.
Gruß Knobbi38
Ja
Da hast Du Recht.
Hier ist die DB (s. Anhang)
Beste Grüße
dddt1
So eine kleine BeispielDB ist doch viel hilfreicher. :)
Kleiner Tip: wie wäre es mit
? SQLListe("SELECT WERT1, WERT2,WERT3 FROM Tabelle2 WHERE Parameter_gleich = 'A'")
Das liefert dir doch alle verketteten Werte wie gewünscht. Jetzt mußt du nur noch SQLListe für jeden unique Wert aus Tabelle1 aufrufen ;)
So hatte ich es auch gehabt.
Aber die Tabelle1 soll zur Anzeige in einem Listbox mit allen Daten gefüllt werden, nicht nur für Wert "A", sondern für "B", "C" usw. auch.
Beste Grüße
dddt1
Wozu dann der ganze Aufwand?
Die Liste bekommt als RowSource die Tabelle2, oder eine Abfrage darauf (wegen
Sortierung) mit allen Spalten. Da siehst du doch auch die drei Werte nebenein-
ander. Für eine Weiterverarbeitung ist die Liste eh kaum zu gebrauchen.
Gespeichert werden muss die auch nicht, da jederzeit berechenbar.
Ausserdem, - es gibt überhaupt kein Datenmodell. Die beiden Tabellen stehen
völlig isoliert voneinander im freien Raum. Wobei man nicht weiss, was mal dabei
herauskommen soll.
Wenn die Felder auch in der realen DB nummeriert sind, ist das ein Designfehler, -
die gehören dann als Datensätze in eine eigene Tabelle.
Sonderzeichen in Objektnamen sind zu vermeiden. Diese Namen müssen immer in []
gesetzt werden, wenn man auf sie zugreift.
gruss ekkehard
Hallo,
das war doch nur eine Beispiel. Du mußt natürlich deine Subquery anpassen:
SELECT DISTINCT ka,
SQLListe("SELECT Wert1, Wert2, Wert3
FROM Tabelle2
WHERE ka = '" & [ka] & "'") AS Werte
FROM Tabelle1
Knobbi38
Hallo Zusammen,
mein Problem ist, dass ich es nicht weiß, wie man die Daten in die Spalte "Zusammengefügt" so reinkriegt, ohne mal einen konkreten Wert von der Spalte "Parameter_gleich" zu haben:
| ID | Zusammengefügt | Parameter_gleich|
| 1 | a_b_c;d_e_f; | A |
| 2 | g_h_i;j_k_l; | B |
| 3 | m_n_o;p_r_s; | C |
Im Grunde genommen, die Inhalte der beiden Spalten "Parameter_gleich" sollen nur verglichen werden. Sind die gleich, dann kommen Wert1, Wert2, Wert3 von Tabelle2 in die Tabelle 1.
Beste Grüße
dddt1
Hallo dddt,
deinen Teil hast du doch jetzt, der liefert die für KA = A,B,C die verketteten Daten. Wenn du das Ergebnis jetzt nimmst und das per Join mit der Tabelle1 verbindest, bekommst du nur die Einträge, welche in Tabelle1 und dem temporären Ergebnis übereinstimmen.
Alle Teile sind dir jetzt bekannt, du musst sie nur noch zusammenfügen.
Gruß Knobbi38
Danke sehr Knobbi!
ich probiere es.
Beste Grüße
dddt1
Wenn es nicht klappt, einfach nochmal melden.
Gruß Knobbi38