Januar 19, 2021, 05:55:51

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Tabelle durchsuchen nach Einträgen in zweiter Tabelle

Begonnen von brudertugg, Dezember 07, 2020, 17:53:56

⏪ vorheriges - nächstes ⏩

brudertugg

Hallo Forum,
ich bin neu hier und versuche mich gerade mit VBA.
Leider habe ich bisher noch keine Lösung im Netz für mein Thema gefunden, daher dachte ich frag ich mal hier.
Ich habe zwei Tabellen.
Erste Tabelle beinhaltet eine Spalte "Benennung" hier werden Werte gelistet wie z.B Schraube DIN 912 M5x12 vz (ca. 2000 Datensätze)

Zweite Tabelle beinhaltet eine Spalte "bitref" mit Suchkriterien (ca. 50 Datensätze) wie z.b. DIN 912, Schraube, etc.

Nun möchte ich über VBA die Spalte Benennung in der ersten Tabelle durchsuchen nach den Kriterien in der zweiten Tabelle Spalte "bitref". Es gibt hier aber keine 100% Übereinstimmung der Werte, die Kriterien aus Tabelle 2 sind lediglich ein Teil der Werte.
Bei Treffer möchte ich den Datensatz nun in der Spalte "BIT" mit einem "x" kennzeichnen.

Ich hoffe ich habe mein Problem einigermaßen verständlich geschildert.
Da ich leider wenig bis keine VBA Kenntnisse habe, gibt es auch noch keinen Code den ich hier aufzeigen könnte.

Danke schon mal für eure Hilfe.
brudertugg
 

MzKlMu

Hallo,
ich fürchte, das ist nicht so einfach wie Du Dir das gerade so denkst.
Zitatdie Kriterien aus Tabelle 2 sind lediglich ein Teil der Werte.
Ist das immer der gleiche Teil ?
Zeige mal 3-4 Beispiele.
Gruß
Klaus

brudertugg

Hallo,
nein leider ist das nicht immer der gleiche Teil.
Die werte können irgendwo in der Zeile stehen.
Bsp:
DIN 912 - M5 x 20 - 8.8 - vz Schraube
Schraube ISO 10642 - M4 x 12 - A2
DIN 9021 - 6,4 - vz Scheibe
DIN 6797 - A -  6,4 verzinkt Zahnscheibe

Hab ich mir fast schon gedacht, dass ich mir dies einfacher vorstelle als es tatsächlich ist.

Gruß
brudertugg

brudertugg

Hallo,
ich habe auch versucht dies über eine Abfrage zu lösen.
Funktioniert aber leider auch nicht so wie gedacht.
Vielleicht gibt es hier eine einfacherer Lösung?
Die Felder heißen etwas anders, aber hier mal das Ergebnis der Abfrage:
Bild Abfrage
Ergebnis1
Ergebnis2

Leider gibt es nur Treffer bei identischen Werten.

Gruß
brudertugg

MzKlMu

Hallo,
und was suchst Du dann in den Beispielen in #2 ?
Mit anderen Worten, wie sehen dann die Einträge in der anderen Tabelle aus mit denen verglichen werden soll ?
Gruß
Klaus

brudertugg

Hallo Klaus,

ich hab deine letzte Frage vermutlich nicht ganz verstanden.
Hier nochmal ein paar Beispiele.
In Tabelle1 Bild "Einträge in Tabelle1" suche ich die Einträge aus Tabelle2 Bild "Suchkriterien in Tabelle2"

Die Bilder Ergebnis 1 und 2 zeigen die Treffer der eindeutig übereinstimmenden Werte aus beiden Tabellen.
Leider aber nur diese..

Gruß
brudertugg


brudertugg

Hallo Franz,
das habe ich schon versucht, allerdings multipliziert Access dann jeden Datensatz von Tab1 mit denen von Tab2 und es gibt auf einmal eine Vielzahl von Datensätzen.
Geht also leider nicht.

Danke dennoch für deine Rückmeldung

Gruß
brudertugg

DF6GL

Dezember 08, 2020, 15:12:12 #8 Letzte Bearbeitung: Dezember 08, 2020, 15:30:12 von DF6GL
Hallo,

zeig mal einen Screenshot der beiden Tabellen-Datenblattansichten(!) , nicht der Abfrage und erkläre anhand der dargestellten Daten, was für ein Ergebnis erwartet wird.


Vermutlich:

Select * From Tabelle1 as A Where Exists (Select Null  From Tabelle2 as B Where A.Bennenung like "*[A].[Bitref]*")

brudertugg

Hallo Franz,
ich habe zwei Tabellen.
Tabelle 1 enthält meine Kundendaten, Tabelle 2 meine Suchkriterien.
Ich möchte die Kriterien aus Tabelle 2 in der Spalte "Benennung" in Tabelle 1 finden und in einer weiteren Spalte z.B. ,,BitKen" in Tabelle 1 mit ,,x" markieren.
Problem hierbei ist, dass die Werte nicht eindeutig übereinstimmen, sondern nur einen Teil des Wertes in Tabelle 1.
Hoffe ich konnte das im Bild einigermaßen darstellen.

Gruß
brudertugg

Beaker s.a.

Hallo,
@franz
Wie kommt's, dass du so ein Gewurschtel anbietest. Hier liegt
doch offensichtlich schon wieder mal ein Strukturfehler vor.
Bist doch sonst auch einer der ersten, der darauf hinweist.

@brudertugg
Beschäftige dich lieber mit den Links 1a. und 4. in Franz'
Signatur, und lerne was über atomare Inhalte (1. Normalform).

gruss ekkehard
 
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

brudertugg

Hallo Ekkehard,
ich nehme an du möchtest mir damit sagen, dass in meiner Spalte Benennung zu viele Infos stecken, welche eigentlich in mehrere Spalten gehören und somit besser auswertbar sind.
Da stimme ich dir zu.
Mein Problem ist, dass ich die Daten so in einem Excel geliefert bekomme und diese nun über Access Stück für Stück verarbeiten möchte.
Ich importiere die Excel Datei und muss vermutlich erstmal damit leben. 

Danke dir für den Hinweis auf die Normalformen, habe wieder etwas gelernt.

Gruß brudertugg

Beaker s.a.

@brudertugg
ZitatMein Problem ist, dass ich die Daten so in einem Excel geliefert bekomme und diese nun über Access Stück für Stück verarbeiten möchte.
Ich importiere die Excel Datei und muss vermutlich erstmal damit leben. 
Nein, du musst die atomaren Inhalte in geeignete Tabellen aufdröseln.
Bei dem Chaos, das da ankommt, wirst du dich dazu wohl mit "Regular
Expressions" auseinander setzen müssen. Hilfe dazu müsste allerdings
von anderer Seite kommen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Dezember 08, 2020, 19:47:53 #13 Letzte Bearbeitung: Dezember 08, 2020, 19:55:13 von DF6GL
Hallo,


@ekkehard:

Was für ein Gewurschtel?  Das SQL-Statement?  Was stört Dich daran?


Die Aufgabenstellung ist/war, die passsenden Datensätze in den vorgebenden Tabellen zu suchen.
Prinzipiell hast Du recht damit, die Tabellen zu normalisieren. Aber auch dafür ist ein "Atomisiervorgang" erforderlich, der vermutlich nicht von Hand erledigt werden wird/soll.

Es gibt wie immer mehrere Möglichkeiten, eine (SQL, dabei auch wieder mehrere Möglichkeiten) )habe ich dargestellt. Andere ist die Verwendung der angesprochen Regular Expressions, die sowieso mehr Flexibilität zeigen.

Eine dritte, neben dem Like-Operator, ist die vielleicht wenig bekannte (und unperformante) Möglichkeit,  die Funktion Instr() in der ON-Klausel in SQL zu verwenden.


... Inner Join On instr(Tabelle1.[Tabellenfeld], Tabelle2.[Tabellenfeld])>0




Nun habe ich einmal nicht auf die Normalisierungsregeln hingewiesen, und schon bekomme ich eins auf den Deckel...

Das Leben ist nicht leicht... :'(  :'(  ;)

brudertugg

Hallo Franz,

ich habe nun deine Select Anweisung in eine Abfrage kopiert und mit meinen Tabellennamen befüllt.
Nun sieht das so aus:

Select [nummer],[bennenung] From tbl_kundendatenimport as A Where Exists (Select Null  From stbl_Billigteilreferenzen as B Where A.Bennenung like "*[A].[bitref]*")

Die Abfrage bringt keinen Fehler, leider aber auch keine Werte als Ergebnis.
Hast du hier noch eine Idee?

Die Regular Expressions sind ein Thema welches ich mal überhaupt nicht verstanden habe, aber gut.

Ich habe die Hoffnung noch nicht aufgegeben, habe es mir aber tatsächlich zu einfach vorgestellt.

Gruß
brudertugg