VisualBasic Office Access VBA: Datenbank "Scannen"

Dimilei

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
257
Guten Abend.
Ich hab ein kleines Problem mit einem Programm für Access.
Ich muss für die mündliche Prüfung für die kommende Woche einen "Barcodescanner" erstellen.
Die Idee ist, dass ich eine Tabelle hab, indem verschiedene Artikel beinhaltet sind, erste Spalte die ArtikelID, zweite Spalte Artikelname und dritte Spalte der Preis.
Durch ein Formular gebe ich in einem Textfeld die ID ein und durch VBA durchsucht es die Tabelle nach der ID und schreibt in 2 extre Textfelder den Artikelnamen und den Preis aus.

Das Problem ist, ich habe durch Google schon von Recordset gehört und versucht es anzuwenden.
Es Funktioniert für die ersten zwei IDs (die Ids sind erstmal in normaler Reihenfolge, also 1,2,3 dann kommt bei mir aus test ne 55) aber bei der dritten ID kommt ein Laufzeitfehler "3021" Kein Aktueller Datensatz.
Mit der verfolgung der Werte, sehe ich, dass durch die Schleife erstmal die Zeile 1 untersucht wird, dann die Zeile 2, dannach kommt aber Zeile 55, also die Zeile 3 wird übersprungen.
Also verstehe ich entweder den RS.Fields und den RS.Move befehl nicht, oder ich hab was falsch gemacht.

Der Programmcode für diesen Vorgang ist:

Private Sub Scan_button_Click()

Set Db = CurrentDb()
Set Rs = Db.OpenRecordset("Artikel", dbOpenDynaset)

Barcode = Textfeld_Barcode.Value
match = False
Zeile = 0
Do
Rs.Move (Zeile)
If Rs.Fields(0) = Barcode Then
Artname = Rs.Fields(1)
Preis = Rs.Fields(2)
match = True
Else
Zeile = Zeile + 1
End If
Loop Until match Or Zeile = MaxZeilen <-- hab bei der Aktivierung des Formulars eine Untersuchung für die maximale anzahl der zeilen.

If match Then
Textfeld_Artikelname = Artname
Textfeld_Preis = Preis
End If

End Sub

Die komplette DB hab ich mal hochgeladen, wer es genauer anschauen möchte:
http://www.file-upload.net/download-2597248/Barcode---Kopie.accdb.html

Ich danke schonmal für jede Hilfe :)

mit freundlichen Grüßen
Drag0nmaster
 
Zuletzt bearbeitet:
Ich kenn mich nicht mit Access aus, aber es sieht so aus, als würdest du alle Zeilen durchgehen, bis du die richtige gefunden hast. Wieso benutzt du nicht einfach die Find Methode vom RecordSet?
 
Kleines Beispiel wie ich einmal so eine ähnlich Suche prog. habe. Es gibt sicher 100 Möglichkeiten.


x = Me.KDNR
Kriterium = "[KDNR]like '" & x & "'"
Set rs = db.OpenRecordset("Tab Ansprechpartner", dbOpenSnapshot)

rs.FindFirst Kriterium

Do Until rs.NoMatch
a = rs![Nachname]
b = b & "," & a
rs.FindNext Kriterium
Loop

Soweit ich das sehe kannst Du alles in dem kleinen Loop lösen. Snapshot weil ich nicht reinschreibe und glaube schneller ist. rs kann bei dynaset auch in die Tabelle schreiben.

Bin kein Programmierer sondern nur Anwender für meine eigenen Bedürfnisse, falls es nicht sauber gelöst ist.
 
Ok Danke ich werds mal probieren
Ergänzung ()

Ich hab mein Problem gelöst, mit den RS.move befehl..
Ich hab das nur falsch verstanden. RS.Move sagt nur um wieviele Datensätze es nach unten gehen soll, von der jetzigen Position aus.

Danke für die Hilfe :)
 
Zurück
Oben