Hallo zusammen,
ich habe folgendes anliegen. Es besteht bereits eine Abfrage die jemand für mich mal erstellt hatt aber die noch nicht komplett ist und wir auch diesbezüglich nicht mehr weiterkommen.
1. Es gibt eine unsortierte Datenbank mit vielen Teilnehmereinträgen.
Aus dieser Datenbank sollen nur die ausländischen Einträge gefiltert werden. Also die sollen auf der Datenbank erhalten bleiben.
Hierzu gibt es eine Excell Datenbank mit deutschen Vornamen die als Filter benutzt wird.
Die Abfrage filtert die deutschen Vornamen bereits raus.
Allerdings wenn in der Datenbank unter der Spalte Vornamen einen doppelten Eintrag
gibt, wird diese nicht rausselektiert. z.B. Hans u. Sylvia
Beispiel:
Datenbankeintrag:
1. Hans
2. Wilhelm
3. Hans u. Syliva
4. Vincenzzo
Bisher bleibt dann Hans u. Sylvia und Vinenzzo übrig.
Ich möchte allerdings das nur Vincenzzo übrig bleibt.
Als Anhang habe ich ein screenshot von der bisherigen Abfrage erstellt.
Kann mir da jemand helfen?
Herzlichen Dank!!
[Anhang gelöscht durch Administrator]
N'abend,
schau Dir die Abfrage1 im Anhang an: arbeitet mit instr (...)
In Abfrage2 bleibt Vinc übrig.
Noch ein Hinweis: Der Name "Name" ist nicht ratsam. "Name" ist ein reservierter Begriff. Nimm lieber "NachName".
Harald
Nachtrag:
1. Der verwendete Dateiname bezieht sich NUR auf das Herausfiltern von Datensätzen und keines falls auf das reale Leben ;D
2. Diese Methode des Filterns ist suboptimal, da auch eine "Naomi" oder ein "Sven" durchaus Deutsche sein können.
[Anhang gelöscht durch Administrator]
Hallo,
etwa so:
SELECT TabelleAlleNamen.*
FROM (TabelleAlleNamen left JOIN TabelleVornamen ON instr(TabelleAlleNamen.VName,TabelleVornamen.Vname)) left JOIN TabelleNachnamen ON instr(TabelleAlleNamen.NName , TabelleNachnamen.Nname)
where TabelleVornamen.Vname is null and TabelleNachnamen.Nname is null
Hallo,
danke für die Antworten. Was ist der Unterschied zwischen der Lösung von bahasu und DF6GL. Und wo müsste ich den Befehl eingeben den mir DF6GL geschrieben hat?
Leider kenne ich mich nicht allzu aus und derjenige der mir das soweit ausgesetzt hatte steht mir nicht mehr zur Verfügung.
Danke ;-)
Hi,
meine Lösung arbeitet mit zwei Abfragen, von denen die zweite auf die erste aufbaut.
Die Lösung von Franz vereinigt das in einer Abfrage.
Einbauen? ???
Abfrage erstellen, bei Ansicht auf sql stellen und den Teil von Franz reinkopieren.
Harald
Hallo Harald, hallo Franz.
erstmal vielen Dank an Euch!! ::) Ich erhalte allerdings einen Fehlermeldung :-\. Wenn ich die Abfrage ausführe erhalte ich die Fehlermeldung "Dieser Recordset kann nicht aktualisiert werden", aber nur manchmal. Ich habe die Tabellen komplett neu angelegt, mit den entsprechenden Namen, ich habe die Spaltenennamen angepasst (z.B. Vname). Hat es vielleicht mit der größe der Haupttabelle zu tun? In diesem Test waren es rund 7.000 Teilnehmer in der Haupttabelle. Ist dann doch vielleicht eine andere Lösung bzw. eine Optimierung notwendig? Braucht auch ziemlich lang um die Abfrage zu erledigen.
Besten Dank für Eure Hilfe. :)
[Anhang gelöscht durch Administrator]
Hallo,
diese Fehlermeldung ist eigentlich keine Folge des Ausführens der Abfrage...
WIE führst Du die Abfrage denn aus?
"aber nur manchmal"
wann ist denn genau "manchmal" (bei welcher Datenkonstellation). Kann es sein, dass manche Namensfelder leer sind?
Die Instr-Funktion mag keine "leeren" Argumente.
....die Abfrage führe ich über einen Doppeklick auf die Abfrage aus. Dann kommt die Sanduhr und er braucht ziemlich lang (ca. 3 Minuten).
Was ich mittlerweile rausgefunden habe ist, dass wenn ich das Gefühl habe das nichts mehr passiert, ich auf irgendein Feld drücke, keine Rückmeldung mehr von Acccess kommt und das Programm abstürzt. Kurz davor kommt die Fehlermeldung die ich erwähnt habe.
Auch wenn keine Fehlermeldung kommt und ich ziemlich lang warte, ist es nicht möglich in der Datenbank zu scrollen. Er braucht eeeewig.
Die Daten habe ich nicht geändert. Jedesmall die selbe Abfrage gemacht.
Es gibt weitere Felder wie Anrede und Titel, das sind manchmal keine Einträge enthalten. Auch unter Vname ist nicht immer was drin.
Kann das mit dem zusammenhängen?
Viele Grüße
Hallo,
"eeewig": ja, das kann sein.... Die Verwendung von InStr im ON-Vergleich kann keinen Index benutzen und ist dadurch lahm.
i"st nicht immer was drin": habe ich vorher ja angesprochen... Es steigt vermutlich die InStr-Funktion bei solcher Situation aus. Benutz die nz()-Funktion bei den Tabellenspalten, um einen Ersatzwert zu bekommen :
instr(nz(TabelleAlleNamen.VName,"~"),nz(TabelleVornamen.Vname,"~")))
Hallo zusammen,
kann mir jemand noch schreiben wo ich diesen Befehl genau eingeben soll? Hab es jetzt an unterschiedlichsten Stellen getestet, leider ohne Erfolg.
Dankee :)
Moin,
Moin,
die Zeilen von Franz aus der Antwort 2 ergänzt um nz:
SELECT TabelleAlleNamen.*
FROM (TabelleAlleNamen left JOIN TabelleVornamen ON instr(TabelleAlleNamen.VName,TabelleVornamen.Vname)) left JOIN TabelleNachnamen ON instr(nz(TabelleAlleNamen.VName,"~"),nz(TabelleVornamen.Vname,"~")))
where TabelleVornamen.Vname is null and TabelleNachnamen.Nname is null
Eine neue Abfrage erstellen:
Entwurfansicht,
das Popup "Tabellen anzeigen" schliessen,
das Icon SQL anklicken oder alternativ über Ansicht > SQL-Ansicht
dort das Wort "select" löschen und die obige Zeilen eintragen.
Statt "TabelleAlleNamen" bitte Deinen TabellenNamen eintragen und die anderen Begriffe wie "TabelleVornamen", "Vname", "Nname" ggf anpassen.
Harald
Moin Harald,
genauso umgesetzt wie du es geschrieben hast. Alles doppelt und dreifach überprüft was die Schreibweisen der Tabellen und der dazugehörigen Spalten anbetrifft. Es erscheint eine Fehlermeldung wenn ich die Abfrage Speichern möchte. Ein Warnfester erscheint mit der Meldung : Verknüpfungsausdruck nicht unterstütz. Dabei wird der Teil mit ON instr(nz(TabelleAlleNamen.VName,"~"),nz(TabelleVornamen.Vname,"~"))) markiert.
hm?
Viele Grüße
Hallo,
SELECT TabelleAlleNamen.*
FROM (TabelleAlleNamen LEFT JOIN TabelleVornamen ON instr(nz(TabelleAlleNamen.VName,"~"),nz(TabelleVornamen.Vname,"~"))) LEFT JOIN TabelleNachnamen ON instr(nz(TabelleAlleNamen.NName,"~"),nz(TabelleNachnamen.Nname,"~"))
WHERE TabelleVornamen.Vname is null and TabelleNachnamen.Nname is null;
Hallo zusammen,
zuerst noch einmal vielen Dank an Harald und Franz. Ich habe mittlerweile diese Abfrage ausgiebig getestet. Leider ist Sie bei den Datenmengen nicht gebrauchber. Wenn ich mehr als 2000 Teilnehmer habe, dauert es eeewig bis die Abfrage fertig ist. Teilweise stürtz Access ab. Wenn ich die Abfrage durchführe von 10 Tsd Teilnehmer habe ich keine Chance. Es werden allerdings Abfragen benötigt mit bis zu 50 Tsd Teilnehmer. Also das brauche ich garnicht erst versuchen, wird wahrscheinlich dein 1 Tag dauern ;-).
Gibt es denn einen anderen Lösungsansatz, Programmiermöglichkeit?
Ich würde auch jemand entgeltlich beauftragen wenn es hier diese Möglichkeit gibt. Hauptsache die Abfrage funktioniert gut!
Vielen Dank!
Hallo,
wie in der der Mail angesprochen, kannst Du mich diesbezüglich anrufen....