Hallo,
ich habe eine Behälterdatenbank in der diverse Kenndaten (Hersteller, Typ, Größe, Gewicht, Inhalt, Bemerkung, etc.) gespeichert sind.
Bis dato habe ich die Suchfunktion mit dem internen Access-Makro durchgeführt, weil es jedes Datenfeld einschließt, was auch problemlos funktioniert.
Jetzt möchte ich an Hand eines neuen Statusfeldes mit den Einträgen "Verfügbar","Bestellt" und "Verschrottet" die Suche/Anzeige im Formular insoferne auf jene Datensätze beschränken, welche den Status "Verfügbar" und "Bestellt" besitzen, d.h. jene Datensätze mit dem Status "Verschrottet" ignoriert.
Die bisher verwendete "interne" Suchfunktion ist dafür leider nicht geeignet.
Ich gehe davon aus, dass ich nicht umhin kommen werde, eine eigene Suchfunktion umzusetzen. Ich persönlich habe mir das in etwas so vorgestellt:
1. Durchsuche alle Felder nach dem ersten Auftreten des gesuchten Begriffs
2. Zeige diesen Datensatz nur an, wenn der Status nicht "Verschrottet" ist und markiere den übereinstimmenden Text in dem Feld des Formulars wo er gefunden wurde (also wie in der klassischen Suchfunktion)
3. Suche nach dem nächsten Auftreten dieses Begriff
4.1 Derselbe Datensätz enthält den Suchbegriff noch einmal => Die neue Stelle wird markiert
4.2 Ein neuer Datensatz enthält den Suchbegriff und dieser wird analog Punkt 2 behandelt
5. Weiter bei Punkt 2 bis zum Ende der Datensätze
Ist diese Vorgehensweise mit vertretbaren Maß umsetzbar oder hat jemand eine bessere Idee?
Vielen Dank im Voraus.
Schönen Abend,
Christian
Moin Christian,
Du kannst doch Dein Statusfeld auf "enthält nicht" - "verschrottet" filtern, dann im gewünschten Feld wie gewohnt suchen.
Ansonsten kannst Du mit VBA natürlich nach Lust und Laune filtern und sortieren.
Gruß
Doming
Hallo Christian,
das ist ein wenig Excel-Denke. In Datenbanken wird mit SQL die anzuzeigende Datenmenge durch eine Where-Bedingung eingegrenzt. In Access kann man dafür auch Filter verwenden, entweder in der Oberfläche im Ribbon oder aber per VBA.
Des Weiteren ist eigentlich üblich, für einen Status einen numerischen Wert zu verwenden anstatt nach Text zu suchen, der möglicherweise auch falsch geschrieben sein könnte.
Soviel als Anmerkung nebenbei. Deine Problembeschreibung ist nicht ganz eindeutig. In deinem Text sprichst du von einem Statusfeld, aber in deiner Aufzählung dann wieder von "Datenfelder durchsuchen". Du solltest dein Problem schon eindeutig und genauer beschreiben. Den Punkt 4.1 kann man als Außenstehender gar nicht richtig nachvollziehen. Das hört sich so an, als ob du eine Volltextsuche in einer Datenbank machen möchtest, die eigentlich so nur von Datenbankservern unterstützt wird - für Access eher eine ungewöhnliche Aufgabe und auch nicht performant.
Knobbi38
Hallo Doming und Knobbi38,
vielen Dank für Eure schnellen Rückmeldungen.
Da habe ich mich wohl etwas zu ungenau - oder zu speziell und dadurch verwirrend - ausgedrückt.
Bisher (normale Standardsuche):- In einem Formular werden alle Kenndaten eines Behälters angezeigt.
- Wenn ich jetzt mittels der Access integrierten Suche eine Wert eingebe um diesen zu suchen (mit Vergleichen = Teil eines Feldinhalts) und der Wert gefunden wird, wird der Inhalt des Formulars mit demjenigen Datensatz aktualisiert, der in irgendeinem Feld diesen Wert teilweise oder ganz enthält.
- Klicke ich jetzt in der Suchfunktion auf die Schaltfläche "Weitersuchen" wird - insoferne vorhanden - zum nächsten Auftreten dieses Wertes gesprungen, egal ob der Suchwert jetzt im gleichen Datensatz (=keine Änderung des Formularinhalts) befindet oder in einem anderen Datensatz vorhanden ist, was wiederrum eine Aktualisierung des Formulars mit demjenigen Datensatz bedingt, der den Wert enthält.
Gewünscht:- Dasselbe Verhalten, allerdings unter der Bedingung, dass gewisse Datensätze - nämlich jene wo der Wert "Verschrottet" im Datensatz steht - bei der Suche ignoriert - und die Suche beim folgenden Datensatz fortgesetzt wird.
- Bemerkung: Der Status ist in einer eigenen Tabelle definiert, steht als Verweis im jeweiigen Datensatz und ist gleichzeitig Datenquelle einer Kombinationsbox, welche als Filterkriterium für die Suchfunktion dienen soll, ein verschreiben ist damit ausgeschlossen.
Ich hoffe jetzt ist erkennbar, auf was ich hinaus will.
Schöne Grüße,
Christian
Hallo Christian,
das von dir gewünschte Verhalten wird von Access so nicht unterstützt. Du müsstest per Filter erst alle DS filtern und dann kannst du in der Ergebnismenge suchen, wie gehabt. Alternative Methoden werden im Ribbon "Start -> Sortieren und Filtern" angeboten.
Ich verstehe immer noch nicht, ob du eine Suche in
einem Feld mit einem bestimmten Teilstring in den Datensätzen durchführen möchtest oder ob du nach allen Vorkommen eines Teilstrings in
allen Feldern der gesamten Tabelle suchst.
Zitat... steht als Verweis im jeweiigen Datensatz
Bei einem "Verweis" gehe ich jetzt mal von einem numerischen Fremdschlüssel aus und so etwas läßt sich doch problemlos Filtern.
Knobbi38
Hallo,
@UlrichDie eingebaute Suche (Statuszeile) sucht immer in allen Feldern und DS.
@DerSolide Das Einfachste ist wohl das Form zuerst auf "Status <> 'verschrottet'"
zu filtern und dann erst mit der Suche zu beginnen.
gruss ekkehard
@UlrichGanz vergessen, - bei der Suche mit Strg-F kannst du auswählen,
wie und wo gesucht werden soll.
@ekkehard:
Vergesse ich auch oft, weil ich das so gut wie nie verwende. Aber ausschließen geht nun mal bei der Methode nicht, bzw. mit ist keine Möglichkeit bekannt, in dem Dialog zwei Kriterien zu verwenden.
VG Ulrich
Bleibt halt nur der vorgeschaltete Filter.
Hallo Ulrich und Ekkehard,
vielen Dank für die Lösung(svorschläge): Vorher Filtern
Manchmal denke ich zu kompliziert und sehe den Wald vor lauter Bäumen nicht ::)
@UlrichIch will einen bestimmten Teilstring in allen Feldern der gesamten Tabelle suchen, so wie Ekkehard es beschrieben hat und ja, der "Verweis" ist ein numerischer Fremdschlüssel
Nochmals danke.
Schöne Grüße,
Christian