Hallo Andy,
ich habe das einmal im Schnellverfahren in ein neues Formular eingebaut. Das alte Formular wollte ich nicht anrühren, da Du da schon viele Elemente drin liegen hast. Die zentrale Abfrage ist:
Code: Alles auswählen
SELECT "Adressen".*, IFNULL( "Stichwort", '' ) AS "SW" FROM "Adressen" WHERE UCASE( "Nachname" ) LIKE IFNULL( ( SELECT UCASE( "Nachname" ) FROM "Filter" ) || '%', UCASE( "Nachname" ) ) AND "SW" = IFNULL( ( SELECT "Stichwort" FROM "Filter" ), "SW" )
Die gesamte Tabelle "Adressen" wird ausgewertet. So hast Du auch den Primärschlüssel verfügbar und kannst Datensätze hinzufügen. Diese Abfrage ist also Grundlage des Formulars. Das eigentliche Formular besteht aus zwei parallel liegenden Formularen; Formular 1 bedient die neue Tabelle "Filter", Formular 2 hat die Abfrage als Grundlage. In Formular 1 liegen ein Texteingabefeld für die Nachnamen ("Filter"."Nachname") und ein Listenfeld für die Stichworte ("Filter"."Stichwort"). Mit dem Formular 1 wird immer nur ein Datensatz beschrieben. In Formular 2 liegen ein Tabellenkontrollfeld (das Du auch auflösen kannst in einzelne Felder ...) und ein Button, der das Formular aktualisiert. Drückst Du diesen Button, wenn Du in Formular 1 eine Eingabe machst, so wird zuerst die Eingabe abgespeichert und dann das untere Formular aktualisiert - ohne irgendwelche Makros.
Zur Abfrage: Die Bedingung hat erst einmal die Grundform
WHERE "Nachname" LIKE 'Eingabetext%'
Das bedeutet, dass vom Text der Anfang mit der Eingabe in Deiner Tabelle "Adressen" übereinstimmen muss. Damit Du auch mit Kleinschreibung bei der Eingabe keine Probleme hast taucht
UCASE("Nachname")
auf. Da Du bei den Stichworten eventuell leere Feldern hast, habe ich für die Filterung erst einmal ein neues Feld erzeugt, das bei NULL das Feld mit einem leeren String versorgt. Diesem Feld habe ich den Alias "SW" zugewiesen. Die Stichworte sind wegen des Listenfeldes eindeutig, so dass dort auf die langsamere LIKE-Bedingung verzichtet werden kann.
Alle Bedingungen sind mit IFNULL() abgesichert, so dass Du bei leeren Filterfeldern alle Datensätze angezeigt bekommst.
Die Tabelle "Stichwort" brauchst Du eigentlich in Deinem Formular nicht, solange Du die Stichworte auch direkt in die Tabelle "Adressen" einbaust. Ich habe jedenfalls die Abfrage so erstellt, dass tatsächlich Stichworte in der Tabelle "Adressen" stehen.
Übrigens: Auch das Alphabet kannst Du jetzt durch Anfangsbuchstaben und den Button "OK" ersetzen.
Gruß
Robert