Access-o-Mania

Access-Forum => Tabelle/Abfrage => Thema gestartet von: dumdidum am Februar 12, 2021, 13:41:43

Titel: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: dumdidum am Februar 12, 2021, 13:41:43
Hallo Zusammen, ich verzweifle gerade ein bisschen.

Ich habe 2 Tabellen

Tabelle 1 - Rufnummer

49201xxxxx  Müller
4940xxxxx Meier


Tabelle 2 - Vorwahlen

49201  Essen
4940  Hamburg



Jetzt hätte ich gerne eine Abfrage die mir folgendes liefert:


49201xxxx Müller Essen
4940xxxxx Meier Hamburg

Damit ich weiß das Müller in Essen sitz

In der Tabelle 1 sind ca 5000 Einträge drin

Die Tabellen sind nicht verknüpft  :P

Ich hoffe einer hat ein Tip für mich
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: ebs17 am Februar 12, 2021, 15:27:55
ZitatDie Tabellen sind nicht verknüpft
In einer Abfrage sollte man das tun. Worüber, sollte auch offenkundig sein.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: Beaker s.a. am Februar 12, 2021, 15:37:56
Oder man folgt den Normalisierungsregeln und speichert die Rufnummer in
Tabelle 1 atomar, - Vorwahl per FK hinterlegt.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: dumdidum am Februar 12, 2021, 15:54:58
Leider kann ich an Tabelle 1 keine Änderungen vornehmen.

Ich benötige ja eigentlich eine Abfrage die folgendes macht.

Schaue in Tabelle 1 auf die Rufnummer und wenn diese das Feld mit dem Wert aus Tabelle 2 (49201 oder 4940 oder...)enthält dann ergänze schreibe in der Abfrage den Ort aus Tabelle 2 dazu

Geht das ohne Verknüpfungen ?
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: MzKlMu am Februar 12, 2021, 16:04:17
Hallo,
wie genau stehen die Telefonnummern in der Tabelle1, sind das die kompletten Rufnummern ohne Leerzeichen zwischen Vorwahl und Rufnummer ?
Ich gehen davon aus, dass da nicht wirklich xxxx drin steht.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: ebs17 am Februar 12, 2021, 16:07:22
Zitat von: undefinedGeht das ohne Verknüpfungen ?
Kommt darauf an, was Du unter Verknüpfungen verstehst.

Eine Verknüpfung im Sinne einer Abfrage ist Vergleich und Zuordnung. Auf was kann man da verzichten?

Wenn Du Deine beschriebene Logik 1:1 umsetzt, also Schleifen in Schleife  und alles in VBA, müsstest Du immer noch vergleichen, das ganze Konstrukt wäre aber viel umständlicher.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: dumdidum am Februar 12, 2021, 16:09:08
Zitat von: MzKlMu am Februar 12, 2021, 16:04:17Hallo,
wie genau stehen die Telefonnummern in der Tabelle1, sind das die kompletten Rufnummern ohne Leerzeichen zwischen Vorwahl und Rufnummer ?
Ich gehen davon aus, dass da nicht wirklich xxxx drin steht.

+492018888 also die xxx sind zahlen
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: MzKlMu am Februar 12, 2021, 16:15:56
Hallo,
ich glaube, das Vorhaben ist nicht möglich. Wie willst Du die Vorwahlen unterscheiden, die können ja 3-6 stellig sein. Also die Positionen 5 bis 9 ist die Vorwahl. Wie willst Du das vom Beginn der Telefonnummer unterscheiden ? Mit anderen Worten, wo endet die Vorwahl und wo beginnt die Telefonnummer ?
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: andyfau am Februar 12, 2021, 19:52:18
Guten Abend,

Vorwahlen sind in Deutschland immer eindeutig. Soll heißen, wenn es 040 gibt, gibt es als Vorwahl nicht die 0401. Hier gehört die 1 dann schon zur TelNr. Deshalb kann man über die Länge der Vorwahl diese prima abgrenzen. Siehe kleine Sub, die das macht. (Tabelle der Telefonnummern muss natürlich um die Spalte "Ort" vorher ergänzt werden.)

Sub FindeOrt()

Dim dB As Database
Dim tbV As Recordset
Dim tbA As Recordset

Set dB = CurrentDb
Set tbV = dB.OpenRecordset("tblVorwahlen", dbOpenDynaset)
Set tbA = dB.OpenRecordset("tblTelNr", dbOpenDynaset)

If tbV.RecordCount = 0 Then
  MsgBox (" Fehler: Tabelle Vorwahlen ist leer.")
  Exit Sub
End If
If tbA.RecordCount = 0 Then
  MsgBox (" Fehler: Tabelle TelNr ist leer.")
  Exit Sub
End If
tbV.MoveFirst
 Do While Not tbV.EOF
  tbA.MoveFirst
  Do While Not tbA.EOF
    If tbV!Vorwahl = Left$(tbA!TelNr, Len(tbV!Vorwahl)) Then
       tbA.Edit
       tbA!Ort = tbV!Ort
       tbA.Update
    End If
    tbA.MoveNext
  Loop
  tbV.MoveNext
Loop
Set tbA = Nothing
Set tbV = Nothing

End Sub
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: crystal am Februar 13, 2021, 02:30:15
Hallo,
es könnte mir einer Public Function funktionieren. (Der Ansatz von andyfau geht ja wohl nicht, weil du keine Schreibrechte für die Tabelle hast.)

Etwa nach diesem Schema:

public function AddOrt(strTel as string) as string
Recordset auf Vorwahlen öffnen mit
  select Vnr, Ort from Vorwahlen where Vnr like "'" & left(telnr,4) & "*' ORDER By Vnr;"
Durch dieses recordset loopen, bis eine VNR gefunden wird, die in der Telnr komplett enthalten ist (Länge der Vorwahl)
und den Ort anfügen
oder "unbekannt".
Blöd ist nur, dass es in D Vorwahlen gibt, die für diverse Orte gelten, z. B. 0711 für Stuttgart, Esslingen, Leinfelden, Fellbach usw. Der Vorwahl 0711 schlicht Stuttgart zuzuordnen, ist da fast schon diskriminierend  :) , zumal man seine TNr auch beim Umzug mitnehmen kann...

Da eine Ortsvorwahl in D mindestens 2 Stellen lang ist (ohne führende 0, plus 2 Stellen Landesvorwahl), schränkt der obige Select die Zahl der möglichen Vorwahlen schon erheblich ein, so dass ein Treffer schneller gefunden würde. (Es gibt allerdings auch Landesvorwahlen mit nur 1 oder mit 3 Stellen.)
Der select würde also z. B. für 4971 zurückliefern:
49711 Stuttgart
497141 Ludwigsburg
497151...

Eine solche Funktion kannst du dann im eigentlichen Select einbauen:
  select TNr, AddOrt(TNr) as TelOrt from...

Man könnte in solch einer Funktion auch etwas anders vorgehen:
4 Stellen aus der TNr ausschneiden und nachsehen, ob es die exakt als Vorwahl gibt.
Wenn nicht weiter mit 5, 6, 7 oder 8 Stellen.
Das wären dann nur 5 DLookups statt eines Loops.

Und: was ist mit Mobil- oder Sondernummern?

Gruß,
crystal
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: MzKlMu am Februar 13, 2021, 11:00:16
Hallo,
Zitat von: undefinedVorwahlen sind in Deutschland immer eindeutig.
nein, das stimmt so nicht, zumindest nicht auf den Ort (bzw. die Stadt) bezogen.
Die Vorwahl 0621 gilt für Ludwigshafen (RLP) und Mannheim (BW), also auch 2 verschiedene Bundesländer.
Und solche Konstellationen gibt es bestimmt auch noch mehr. Es gibt viele kleinere Orte/Städte die zu einer Vorwahl zusammengefasst sind.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: andyfau am Februar 13, 2021, 13:21:50
Das "eindeutig" bezieht sich auf die Ortnetzkennzahlen. Diese sind eindeutig definiert. Sie sind nicht gleichzusetzen mit dem Ort. Also ist es kein Problem wenn die Vorwahltabelle ordnungsgemäß gefüllt ist.

siehe auch
https://upload.wikimedia.org/wikipedia/commons/f/f6/Karte_Telefonvorwahlen_Deutschland.png

Dann eine simple Abfrage:
Sie dürfen in diesem Board keine Dateianhänge sehen.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: MzKlMu am Februar 13, 2021, 15:59:34
Hallo,
wenn in der ordnungsgemäß gefüllten Vorwahltabelle steht

0621 Ludwigshafen
0621 Mannheim

Wie willst Du in der Telefonnummer

0621123456 Lu
0621345678 Ma

den richtigen Ort herausfinden ?
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: andyfau am Februar 13, 2021, 16:28:23
Hallo Klaus,

zwei Einträge mit der gleichen Vorwahl sind nicht ordnungsgemäß. (siehe Wikipedia-Link/Karte).
Es geht, wie gesagt, um die Ortsnetzkennzahlen, nicht um die Orte. Ortsnetzkennzahlen sind einmalig und richten sich nach den früher von der Post festgelegten Fernmeldeamtsbezirken. Somit sind in der Tabelle der Vorwahlen diese als non-duplicate einzutragen.

Ist also kein Datenbankproblem, sondern ein Datenproblem, vererbt aus alten Zeiten.
Hilft nur, mit einer TelNr auch die Adresse zu speichern. Oder, zumindest die PLZ, um dann darüber den Ort/Ortsteil zuordnen zu können.

Beste Grüße
Andreas
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: MzKlMu am Februar 13, 2021, 16:43:50
Hallo,
in der PLZ Tabelle gibt es ein Feld für die Vorwahl und ein Feld für den Ort. Nur die Kombination aus Vorwahl und Ort ist eindeutig. Das siehst Du auch in der Wikipedia Karte, da stehen bei 0621 zwei Orte (Lu/Ma).

Auch die PLZ mit zu speichen würde nix nutzen, denn die PLZ ist nicht eindeutig. Es gibt Orte die zu einer PLZ zusammengefasst werden.
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: andyfau am Februar 13, 2021, 18:38:05
Hallo nochmal.

Mal zurück zum Anfang.
Er hat nur Vorwahl und Ort auf der einen Seite. TelNr und Name auf der anderen Seite.
Tabelle 1 soll nicht geändert werden. Also geht nur der Verweis auf den Ort in der Vorwahltabelle.
Wenn dort nicht LU/MA sondern nur Mannheim drin steht, hat er als Ergebnis immer Mannheim auch wenn das Ergebnis Ludwigshafen sein müsste.
Es sei denn die Vorwahl ist nicht unique. Dann gehts aber auch nur in soweit, dass ein Name dann zweimal auftaucht, was ja auch nicht sein darf. Es wäre aber dann zumindest als Hinweis zu werten, dass in diesem Fall die Adresse überprüft werden müsste.

Wenn man es also 100 % haben will, muss die Adresse referenziert werden. PLZ wahr eine Idee das zu erleichtern, die so glaube ich, auch funzt. Oder, haben Teile von Ludwigshafen die gleiche PLZ wie Manheim und gleichzeitig auch die gleiche Vorwahl? Zumindest wäre es etwas genauer.

Gruß
Andreas
Titel: Re: Abfrage mit Wert aus einer anderen Tabelle
Beitrag von: dumdidum am Februar 17, 2021, 20:01:20
Hi danke für eure tips

ich habe die Tabelle Rufnummer über excel mit sverweis umgebastelt und neu importiert ist einfacher

trotzdem danke an alle