Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Xoar am Januar 26, 2015, 15:25:06

Titel: Datensatzsuche über mehrere Felder...
Beitrag von: Xoar am Januar 26, 2015, 15:25:06
Hallo, nach langer Abstinenz melde ich mich auch mal wieder, leider schon wieder viel vergessen von dem was ich mal wusste ;(

Ok nun zum eigentlichen Problem:

Ich suche mittels eines Kombinationsfeld (3. Auswahlmöglichkeit im Assistenten) nach einem Datensatz um diesen dann komplett anzuzeigen, das funktioniert auch super, ABER ich möchte gerne das er alle meine Felder durchsucht und nicht nur eins.

Bsp:
Feld1: Vorname
Feld2: Nachname
Feld3: ...

Wenn ich jetzt im Kombifeld was reinschreibe, springt er ja direkt in der Anzeige zu den möglichen Datensätzen, leider aber nur für Feld1.

Wie gestalte ich es am besten, dass er auch die anderen Felder durchsucht und dann am besten auch nur noch die anzeigt, wo die Suchkriterien übereinstimmen.

ich glaube schon fast, dass es wieder auf nen VBA-Code hinausläuft.


Grüße
Marco
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: DF6GL am Januar 26, 2015, 15:51:31
Hallo,

mit EINEM Kombifeld geht das wohl nicht... (Woher bezieht das Kombi seine Listenfeld-Daten?)

Wenn Du in allen (angegebenen) Feldern nach einem bestimmten Text-Vorkommen suchen (filtern) willst, sollte das etwa so funktionieren:

Erstelle in ungebundenes Textfeld im Formularkopf ("txtSuchen").

Erstelle für dieses Textfeld eine Ereignisprozedur für dessen Ereignis "Bei Änderung":

Sub txtSuchen_Change()
Me.Filter = "Vorname & '|' &  Nachname & '|' & Feld3 Like '*" & Me!txtSuchen.Text & "*'"
Me.Filteron=true
End Sub




Die Optionseinstellung "Cursorverhalten bei Eintritt in Feld"  muss dabei auf "Zum Ende des Feldes gehen" stehen.

Ansonsten könnte ein weitere Schaltfläche ("btnSuchen") und deren Ereignis(Prozedur) "Beim Klicken" für die Filterung verwendet werden:

Sub btnSuchen_Click()
Me.Filter = "Vorname & '|' &  Nachname & '|' & Feld3 Like '*" & Me!txtSuchen& "*'"
Me.Filteron=true
End Sub

Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: Xoar am Januar 26, 2015, 17:08:54
Hallo,

ja ist schonmal nen kleinen Schritt weiter so,

also Herkunft ist die von Access automatisch erstelle sqlAbfrage von der tblMitarbeiter_komplett, wo alle Felder integriert sind.

Zitat
Die Optionseinstellung "Cursorverhalten bei Eintritt in Feld"  muss dabei auf "Zum Ende des Feldes gehen" stehen.

Finde ich garnicht die Option in den Objekteigenschaften (Access 2013)

Ein Problem ist noch, dass durch den VBA Code ja immer direkt nach jeder Zeicheneingabe gefiltert wird, ich also immer nur den Anfangsbuchstabe eintragen kann, gewollt ist eigentlich das die Filterung verbessert wird, dadurch das ich mehrere Zeichen eingeben kann

Bsp:
Ich tipp "F" ein, dann springt er sofort zu Falco, es gibt aber auch ein Florian, deshalb wäre "Fl" genauer, geht aber im Moment nicht.

Ich möchte eigentlich bei der direkt Suche bleiben, also nicht den ganzen Suchbegriff eintippen und mit einem Button filtern.

Du sagtest ja, dass das nicht über ein Kombinationsfeld zu lösen ist, hast Du denn noch eine Idee wie man es realisieren kann, dass man eine gefilterte Liste angezeigt bekommt, wo man den Datensatz auswählen kann? (verkleinert sich ja immer, je genauer ich den Suchbegriff eintippe)
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: DF6GL am Januar 26, 2015, 17:17:14
Hallo,

such die Optionen, nicht Eigenschaften.....

Datei/Optionen/Clienteinstellungen


ZitatDu sagtest ja, dass das nicht über ein Kombinationsfeld zu lösen ist, hast Du denn noch eine Idee wie man es realisieren kann, dass man eine gefilterte Liste angezeigt bekommt, wo man den Datensatz auswählen kann? (verkleinert sich ja immer, je genauer ich den Suchbegriff eintippe)

Genau die Lösung hab ich doch präsentiert?   ::) :o
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: Xoar am Januar 26, 2015, 17:38:46
Hi,

ja nach der Umstellung in den Optionen kann ich nun mehrere Buchstaben eintippen *top*

Entweder hab ich noch was "übersehen" oder wir reden ein klein wenig dran vorbei.

Also zur Zeit ist es so, dass ich in der Kopfzeile im ungebundenen textfeld einen Wert eintrage und er mir sofort im Formular den passenden Datensatz anzeigt, das ist ja schonmal gut, ich hätte aber gerne dass man im textfeld alle möglichen Datensätze angezeigt bekommt und dann den passenden auswählen kann und dieser erst dann im Formular angezeigt wird.

Das geht mittels Textfeld nicht wirklich, oder?
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: DF6GL am Januar 26, 2015, 21:21:49
Hallo,

es geht fast alles, wenn man weiß, was Du genau machen willst...

Wenn Du über ein Zwischen-Steuerelement (Listenfeld) einen einzelnen Datensatz im Formular anzeigen (filtern) willst, dann muss halt erst das (zusätzliche) Listenfeld über das Such-Textfeld mit vor gefilterten Datensätzen (Einträgen) gefüllt  und im zweiten Schritt durch Klick auf einen Listenfeld-Eintrag das Formular zur Anzeige des gewünschten DS gefiltert werden.



Sub txtSuchen_Change()
Me.lstListe1.Rowsource ="Select ID,Vorname, Nachname from tblTabelle1 where  "Vorname & '|' &  Nachname & '|' & Feld3 Like '*" & Me!txtSuchen.Text & "*'"
End Sub


Sub lstListe_Click()
Me.Filter = "ID = " & Me!lstListe1.Column(0)
Me.FilterOn =true
End Sub



Listenfeld:
Spaltenanzahl: 3
.
.
.



Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: Xoar am Januar 26, 2015, 23:57:27
Hi,

hab das mal so versucht wie Du geschrieben hast, leider klappte das nicht ganz. Irgendein Kompilierungsfehler.

Habs versucht zu korrigieren, denke habs nur verschlimmbessert.

Hab die Datenbank mal als .zip hochgeladen, da sie sonst zu groß war, damit Du dir das mal besser vorstellen kannst.

Schlaft gut....
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: DF6GL am Januar 27, 2015, 09:47:58
Hallo,

es fehlen Leerzeichen im SQL-String:

Me!gefiltertes_Listenfeld.RowSource = "Select Mitarbeiter_ID,Vorname, Nachname, PL[color=red]Z "[/color] _
        & "from tblMitarbeiter_komplet[color=red]t "[/color] _
        & "where Vorname & '|' &  Nachname & '|' & PLZ Like '*" & Me!txtSuchfeld.Text & "*'"

weiterhin ist zweckmäßig:

Me.Filter = "Mitarbeiter_ID = " & [color=red]Nz([/color]Me!gefiltertes_Listenfeld.Column(0)[color=red], 0)[/color]

zusätzlich sollte überall eine Fehlerbehandlung eingebaut werden.
Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: Xoar am Januar 27, 2015, 11:50:50
 ;D super klappt.

Was so ein blödes Leerzeichen ausmacht....

Ich kann garnicht in Worte fassen, wie glücklich mich das macht  ;)

was genau meinst du mit Fehlerbehandlung? Eine selbstgeschriebene Fehlermeldung wenn eine Eingabe nicht stimmt?

Titel: Re: Datensatzsuche über mehrere Felder...
Beitrag von: DF6GL am Januar 27, 2015, 12:57:16
Hallo,

http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Fehlerbehandlung