Formular-Eingabe soll Datensatz NICHT ändern,

… sondern nach diesem Wert suchen.

Hallo,

Wie bringe ich Access dazu, in einem Formular eine Suchmöglichkeit so einzubauen, dass diese durch Drücken der Taste „ENTER“ den Datensatz nicht ändert, sondern die Eingabe als Suchparameter interpretiert?

Beispiel:

lfd. Nummer = 1
Filmtitel = „Ein Mann sieht rot“
Lagerort = „Box1“

lfd. Nummer = 2
Filmtitel = „Terminator“
Lagerort = „Box1“

etc.

Bei einem angezeigten Datensatz wird z.B. lfd. Nr. 1 angezeigt. Durch Eingabe von „2“ mit nachfolgendem „ENTER“ wird dieser Datensatz geändert. Das ist jedoch nicht das Ziel. „Enter“ soll nach Eingabe der lfd. Nr. den dazugehöreigen Datensatz suchen und anzeigen. Eine Änderung soll erst z.B. mit „SHIFT-ENTER“ oder durch Druck auf den entsprechenden Button durchgeführt werden.

Wer weiß was?

Gruss,
HWW

Hallo Walter,

du solltest ein neues Textfeld anlegen ohne Stuerelementinhalt. Dann kannst du dem jeweiligen Button, mit dem du die Datensätze wechselst, folgende Zeile anhängen, um das neue Textfeld mit der jeweils laufenden Nummer zu befüllen:

Beispiel Button 'Nächster Datensatz

DoCmd.GoToRecord , , acNext
[Neues_Textfeld] = [lfd_Nummer]

Das Feld ‚lfd_Nummer‘ sollte unsichtbar gemacht werden. Dazu darfst du aber keinesfalls die Eigenschaft ‚sichtbar‘ auf ‚nein‘ stellen, denn mit der nachfolgenden Suchprozedur wird der Focus auf dieses Feld gesetzt.

Stattdessen mussst du die Eigenschaft ‚Höhe‘ des Feldes ‚lfd_Nummer‘ auf 0 stellen und den Rahmen der Hintergrundfarbe anpassen. Dann leg das Feld ‚lfd_Nummer‘ in irgendeine Ecke des Formulars. Das neue Textfeld muss die Stelle des alten Feldes einnehmen.

Dann trägst du bei der Eigenschaft ‚Bei Fokusverlust‘ des neuen Textfeldes folgende Prozedur ein:

dim gv_suchwert

gv_suchwert = [Neues_Textfeld]
Forms![frm_Formularname]![lfd_Nummer].SetFocus
DoCmd.FindRecord gv_suchwert, , True, , True

Der eingegebene Wert wird dann nicht mehr den Datensatz ändern, sondern es wird nur noch auf die eingegebene Datensatz-Nr. gesprungen.

Allerdings solltest du noch eine Fehlerquelle ausschalten: Wenn ein Wert eingegeben wird, der als Datensatz nicht vorhanden ist, sollte dies mit einer ordentlichen Meldung angezeigt werden.

Wenn es nicht klappen sollte, melde dich einfach wieder.

Gruß Ralph

PS: Ich bin davon ausgegangen, dass der Wert lfd_Nummer ohne Duplikate ist (sonst funktioniert es nicht)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Walter,

Das Feld ‚lfd_Nummer‘ sollte unsichtbar gemacht werden. Dazu
darfst du aber keinesfalls die Eigenschaft ‚sichtbar‘ auf
‚nein‘ stellen, denn mit der nachfolgenden Suchprozedur wird
der Focus auf dieses Feld gesetzt.

Ich würde es schon auf unsichtbar setzen, denn wie es der Teufel will, kommt irgendwann der Fokus auf dieses Feld und der Anwender macht Murks (sei es durch Tab-Drücken, dumm in der Gegend klicken oder Fokussieren beim Suchen und nicht De-Fokussieren).

gv_suchwert = [Neues_Textfeld]

Hier setzt Du dann das Steuerelement sichtbar:

Forms![frm\_Formularname]![lfd\_Nummer].Visible=true

und normal weiter im Text:

Forms![frm_Formularname]![lfd_Nummer].SetFocus
DoCmd.FindRecord gv_suchwert, , True, , True

Jetzt den Fokus auf ein beliebiges Steuerelement, welches Dir gerade sinnvoll in den Kram passt, und dann das „Suchfeld“ wieder unsichtbar:

Forms![frm\_Formularname]![AnderesFeld].SetFocus
Forms![frm\_Formularname]![lfd\_Nummer].Visible=False

Gruß, Manfred

Hallo,
machs einfach einfach.
Suchen mit einer Kombibox und alle daten gesperrt.
Wenn du was ändern willst, ein neues nicht gesperrtes formular aufrufen das nur den einen Datensatz anzeigt oder,
ein Button auf dem Formular mit dem Daten aktiviert werden und nach update das feld wieder sperren.
Narren (User) sicher.

Gruß Hans