Access VBA bestimmten Datensatz öffnen

Anmerkung: hab das schon ins Access Forum reingestellt, da gab es bis jetzt aber keine Rückmeldung also versuchs ich mal hier!

Hallo,

ich wollte fragen, wie man in Access VBA erreichen kann, dass man in einem Formular zu einem bestimmten Datensatz springen kann, da ein manuelles suchen mit vielen Datensätzen sehr aufwendig ist. Das ganze soll so aussehen: Unter einer Schaltfläche „Gehe zu Item“ soll der VBA code fragen, zu welcher Item-Nummer im Formular gesprungen werden soll, der benutzer gibt diese ein und access öffnet dann den gewünschten datensatz.

habe versucht, was in der hilfe zu finden und auch eine GoToRecord Funktion gefunden, die vielleicht so etwas macht, ich verstehe aber die Erklärungen in der Hilfe meistens nicht und es hat auhc nicht geklappt.

Laura

Hallo,

so etwas habe ich schon mal beantwortet:

http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

Falls Unklarheiten bei der Umsetzung der dort beschriebenen Vorgehensweise bestehen, einfach noch mal melden.

Viele Grüße, tester

Hallo,

leider treten bei mir noch Fehler auf. Das Feld mit den Nummern, nach denen ich suche, heißt sowohl in der Tabelle als im Formular PLZ.
Mit dem Code

Private Sub Befehl45_Click()
Dim a As DAO.Recordset
Set a = Me.RecordsetClone
a.FindFirst „PLZ = 3116“ & Me!PLZ.Value
If Not a.NoMatch Then

Me.Bookmark = a.Bookmark
Else
MsgBox „Datensatz nicht gefunden!“
End If
a.Close
Me!PLZ.Value = „“
End Sub

tritt in der Zeile
a.FindFirst „PLZ = 3116“ & Me!PLZ.Value
der Fehler „Datentypen in Kriterienausdruck unverträglich“ auf.
Wenn ich stattdessen
a.FindFirst „PLZ = ‚3116‘“ & Me!PLZ.Value
schreibe, gibt es einen Syntaxfehler…

was mache ich falsch??

Viele Grüße,
Laura

Hallo,

Ebenfalls Hallo!

leider treten bei mir noch Fehler auf.

a.FindFirst „PLZ = 3116“ & Me!PLZ.Value

Die Feldbezeichnung der Tabelle muss immer in eckige Klammern eingeschlossen werden. Sofern in einem Textfeld gesucht wird, muss der nach dem „=“ folgende Wert immer in ‚‘ eingeschlossen werden. Bei durchsuchten Zahlenfeldern kann das entfallen.

Wenn es sich bei dem Tabellenfeld PLZ um ein als Text eingerichtetes Feld handelt, dann muss der Suchbefehl folgendermaßen aussehen:
a.FindFirst „[PLZ] = '3116“ & Me!PLZ.Value & „’“

Für den Fall, dass es sich bei PLZ um eine Zahlenfeld handelt musst Du die Kombination der beiden Zahlen (durch Nutzung von & ergibt sich ein String)wieder in eine Zahl umwandeln.

a.FindFirst "[PLZ] = " & CInt(„3116“ & Me!PLZ.Value)

Hoffentlich funktioniert es jetzt.

Viele Grüße, tester!

Hallo tester,

ich verwende jetzt folgenden Code:

Private Sub Befehl44_Click()
Dim a As DAO.Recordset
Set a = Me.RecordsetClone
a.FindFirst „[PLZ] = '3116“ & Me!PLZ.Value & „’“
If Not a.NoMatch Then
Me.Bookmark = a.Bookmark
Else
MsgBox „Datensatz nicht gefunden!“
End If
Me!PLZ.Value = „“
a.Close
End Sub

Leider wird nun bei klick zunächst „datensatz nicht gefunden“ angegeben und dann der plz wert des aktuellen datensatzes gelöscht. wenn man dann nochmal auf den button klickt, wird zwar der richtige datensatz angezeigt, aber wieder dessen plz gelöscht… ohne
Me!PLZ.Value = „“
wird immer nur „datensatz nicht gefunden“ angezeigt

hoffe du kannst mir nochmal helfen, wir sind ja nah am ziel :smile:

Grüße Laura

hallo tester,
ich habe jetzt durch einen Hinweis im Access Forum das Problem auf andere Art gelöst (mit der Funktion Docmd.FindRecord)
Trotzdem vielen Dank für deine Bemühungen!

Grüße Laura

Hallo tester,

Ebenfalls Hallo!

ich verwende jetzt folgenden Code:

Leider wird nun bei klick zunächst „datensatz nicht gefunden“
angegeben und dann der plz wert des aktuellen datensatzes
gelöscht. wenn man dann nochmal auf den button klickt, wird
zwar der richtige datensatz angezeigt, aber wieder dessen plz
gelöscht…

Auch wenn Du Dein Problem schon anderweitig gelöst hast, werde ich die Sache doch noch berichtigen. Für den Fall, dass Du dies noch mal benötigst oder jemand anderes ein ähnlich gelagertes Problem hat und hier liest.

Bin leider selber etwas mit den Feldbezeichnungen durcheinandergekommen, daher das ungewöhnliche Ergebnis.

Gundidee des Codes ist es, in ein ungebundenes Feld im Formular einen Suchwert einzutragen, nach Druck auf eine Schaltfläche den Wert in der Datenquelle des Formulars zu suchen und den gefundenen Datensatz im Formular als aktuell zu setzen.

Das Feld „PLZ“ im Formular gibt natürliche den Inhalt Deiner Datenquelle wieder und darf nicht durch den Code über Me!PLZ="" geändert werden. Auch als Suchbegriff im Code über a.FindFirst … & Me!PLZ … kann dies keine Verwendung finden, da dann der aktuelle Datensatz gesucht wird, was ja Quatsch ist.

Vor Ausführung des Codes muss im Formular ein ungebundenes Textfeld eingefügt werden (Name z.B. „PLZSuch“) und für die Suche darauf zurückgegriffen werden:

Private Sub Befehl44_Click()
Dim a As DAO.Recordset
Set a = Me.RecordsetClone
a.FindFirst „[PLZ] = '3116“ & Me!PLZ Such.Value & „’“
If Not a.NoMatch Then
Me.Bookmark = a.Bookmark
Else
MsgBox „Datensatz nicht gefunden!“
End If
Me!PLZ Such.Value = „“
a.Close
End Sub

Außerdem muss es sich bei dem Feld „PLZ“ immer um einen eindeutigen Wert handeln, der in der Datenquelle nur einmal auftaucht, sonst findet man immer nur den ersten Datensatz mit Übereinstimmung.

Alternativ zu dem Suchbegriff über die Eingabe in einem Textfeld im Formular kann man den Suchwert auch direkt im Code abfragen:

Private Sub Befehl44_Click()
Dim a As DAO.Recordset
Dim PLZSuch as String
Set a = Me.RecordsetClone
PLZSuch = Inputbox(„Bitte Suchwert eingeben“)
If PLZSuch = „“ Then Exit Sub
a.FindFirst „[PLZ] = '3116“ & PLZSuch & „’“
If Not a.NoMatch Then
Me.Bookmark = a.Bookmark
Else
MsgBox „Datensatz nicht gefunden!“
End If
Me!PLZSuch.Value = „“
a.Close
End Sub

Vielleicht hast Du trotz Deiner anderweitigen Lösung noch Lust und Laune Dich ein wenig mit diesen beiden alternative Vorschlägen zu beschäftigen und evtl. auch mal den Code zu testen.

Viele Grüße, tester!