PDA

Vollständige Version anzeigen : Suchen und Nachschlagen in Kombi und Textfeldern


J_Eilers
03.12.2003, 09:28
Morgen,

hier ist mein zweites Beispiel. In diesem geht es um das Suchen und Nachschlagen entsprechender Einträge eines Kombifeldes und das Suchen in einem Listenfeld anhand eines Textfeldes.

Das angehängte Beispiel wurde in Access 2000 erstellt, funktioniert aber auch in Access 97 (ist konvertiert).
Verwendet wurde die deutsche Version.

frmKombi:

In diesem Formular werden Daten anhand einer Auswahl im Kombifeld gesucht. Hier werden 2 Möglichkeiten aufgezeigt. Column und DLookUp.
In der linken Spalte wird Column verwendet und in der rechten DLookUp.

Column:

Für Column ist es notwendig, dass alle Daten im Kombifeld vorliegen. Hierzu geht man in der Entwurfsansicht auf die Datenherkunft seines Kombifeldes und kann in der zugrunde liegenden Abfrage die entsprechenden Felder einfach hinunterziehen (bei mehreren Tabellen / Abfragen muss eine Verknüpfung bestehen). Danach muss ggf. noch die Spaltenanzahl und die Spaltenbreite korrigiert werden. In meinem Beispiel ist die gebunden Spalte, die ID-Spalte, da hierdurch das Suchen einfacher ist.
Nun erstellt man sich ungebundene Textfelder und schreibt in diese als Steuerelementinhalt:

=DeinKombinationsfeld.Column(X)

Wobei X die Spaltennummer angibt und bei 0 anfängt.

DLookUp:

Bei DLookUp werden die Daten aus der Tabelle direkt gesucht. Dies kann bei großen Tabellen zu Performanceproblemen führen. Nachdem man sich hier ebenfalls ungebundene Textfelder erstellt hat (die Daten sind ja schon gespeichert und dienen nur zum Anschauen), schreibt man als Ereignis nach Aktualisierung des Kombifeldes:

Me!DeinTextfeld = DLookUp("[DeinTabellenfeld]", "[DeineTabelle]", "[DeinTabellenIDFeld] = " & Me!DeinKombifeld

Vorraussetzung ist hier wiederum, dass die gebundene Spalte die ID-Spalte ist. Falls das nicht der Fall ist, steht eine weitere Erklärung in meinem anderen Beispiel (http://www.ms-office-forum.net/forum/showthread.php?s=&postid=462049).

frmKombiContext

Hier wird in einem gebundenem Formular der Datensatz gesucht, der der Auswahl im Kombi entspricht. Danke an TommyK ;)

Als Ereignis nach Aktualisierung:
If IsNull(Me!Kombinationsfeld0) Then
MsgBox "Sie haben keine Auswahl getroffen"
Else
With CodeContextObject
Me.Text16.SetFocus
DoCmd.FindRecord .Kombinationsfeld0, acEntire, False, acDown, False, , True
End With
End If

Hier wird mit FindRecord der entsprechende Datensatz angesprungen.
Mit CodeContextObject wird das Objekt ermittelt, in welchem ein Code ausgeführt wird.
DoCmd.FindRecord ist eine Funktion, die Daten entsprechend eines Kriteriums (.Kombinationsfeld0) herraussucht.

frmSuche

Hier gibt es 2 Listenfelder, die anhand eines Eintrages im Textfeld gefiltert werden.

Im oberen Listenfeld habe ich in der zugrunde liegenden Abfrage einen Verweis auf das Textfeld erstellt und lasse dieses bei Änderung auffrischen.

Me!Liste16.Reqery

Im unteren Listenfeld wird die Datenherkunft erst bei Änderung mit der RowSource-Funktion zugewiesen (näheres hierzu siehe mein anderes Beispiel (http://www.ms-office-forum.net/forum/showthread.php?s=&postid=462049))

Zu beachten bei diesem Vorgehen, dass man als Kriterium Me!Textfeld.Text verwendet, um den Eingabetext zu verwerten. Des weiteren habe ich noch ein * vorangestellt und eines nachgestellt, damit wird nach einem Texteil gesucht und man muss nicht das ganze Wort eingeben (ähnlich der Adressleiste im Internet Explorer).

Ich hoffe, dass das Beispiel und die Erklärung verständlich sind und freue mich über Feedback in jeder Art ;)

TommyK
23.01.2004, 16:18
hopp

J_Eilers
23.01.2004, 16:52
@Tommy Schau mal ganz unten in meiner Signatur. So kann man das auch lösen ;)

heini
26.01.2004, 07:51
Guten Morgen Jan!

Ich habe mir mal dein Beispiel angesehen.
Soweit ich das vor dem Kaffee beurteilen kann :D , sieht das doch sehr gut aus.
Vor allen Dingen Beispiel und Erklärung sind so verfasst, daß doch (fast ;) )
jeder das nachvollziehen kann.

Danke und 5 Points :biggrinl:
:10points:

J_Eilers
26.01.2004, 08:02
Morgen Heini,

nach 500 Klicks und 90 DL's gibts tatsächlich mal Feedback ;) Mal sehen ob die Erklärung für die Überarbeitung ebenso gut wird :)

heini
26.01.2004, 08:10
Naja,

wenn jeder fünfhundertste ein Feedback gibt, hast Du 2016 ein repräsentatives Ergebnis :D

acer2k
23.02.2004, 23:29
Danke für die Anleitung.

Hat mir sehr bei einem kleinen Projekt geholfen.

berndl
04.03.2004, 11:41
Hi Jan,

ich bin leider noch ein schrecklicher Access-DAU und war die ganze Zeit auf der Suche nach einer solchen oder ähnlichen Abfrage.

So ganz habe ich es noch nicht geschnallt, bin aber hoffe ich auf dem besten Wege.

Vielen Dank für Deinen Beitrag.

Mit freundlichen Grüßen
Bernd

Franko Mustacho
15.04.2004, 19:18
Lieber Jan,

ich hab Dein Beispiel jetzt mal getestet, allerdings tritt folgender Problemfall bei mir auf:

Ich habe ein Formular, welches optional entweder die Wahl aus vorhandenen DS (Dein Beispiel) oder die Eingabe neuer Daten zulassen soll.
Verwende ich nun das Beispiel und stelle ich die Formulareigenschaft DataEntry auf True - meckert er entweder rum das er .Find Record ni findet (logisch) oder sucht mir den richtigen DS raus hängt ihn aber erneut an die Tabelle dran - so das DS mehrfach vorkommen.

Wie kann ich nun realisieren, dass ich mittels eines Kombifeldes ENTWEDER neue DS eingeben kannn oder alte mit entsprechender ID raussuchen kann?

Viele Grüsse Frank

omron
17.04.2004, 17:53
Hallo Jan,

Einfach spitze!

Da kann auch ein Anfänger wie ich was damit anfangen.....

Gruß
Omron

VII
18.08.2004, 10:32
Hi

habe das Prob, dass wenn ich mehr spalten anfügen möchte mir access in meinen Textfelder anstatt


=DeinKombinationsfeld.Column(X)


das ausgibt


=[DeinKombinationsfeld].[Column](X)


auch, wenn ich es so wie oben gecodet eingegeben habe...

[VII]

EDIT: Geht doch...sry...

danchou
18.08.2005, 09:58
die anleitung sieht nett aus nur leider kann ich mir das attachment nich laden :/
njo shit happens :P

absi
02.10.2013, 08:45
Hallo Jan

Ich wollte das Beispiel mit AC 07 öffnen, geht aber nicht da die Datei Schreibgeschützt ist.
Gibt es eine andere Möglichkeit?

Danke für die Info

Absi


Komplettes Zitat des ersten Beitrags wurde entfernt.