Wie mit VBA Werte aus ACCESS-Tabelle auslesen

Ich habe eine (Beispiel-)Datenbank mit den Feldern F1, F2, F3, … Fn und die Datensätze D1, D2, D3, … Die Tabelle ist momentan so mit Werten gefüllt, daß in den Spalten Fx unterschiedlich viele Werte eingetragen sind, z. B. so:

 F1 F2 F3 
D1 x x x 
D2 x x x 
D3 x x 
D4 x x 
D5 x 
D6 x 

Ich möchte nun aus einer bestimmten Spalte den jeweils letzten(!) Wert auslesen. (Ist natürlich abhängig von der aktuellen Sortierreihenfolge, aber das ist schon so sichergestellt). Einer meiner Codeschnipsel sieht so aus:

Sub test () 
set db = CurrentDb() 
set tb = db.OpenRecordSet("Tabelle1") 
' "Tabelle1" ist der Name einer existierenden Tabelle in der aktuellen Datenbank 
tb.MoveLast 
fn = "Spalte1" 
' fn beliebiger Variablenname 
' "Spalte1" Name einer Spalte in der Tabelle tb
ergebnis = tb(fn) 
End Sub 

Das funktioniert leider nur, wenn alle Spalten gleichmäßig gefüllt sind. Um zum gewünschten Ergebnis zu kommen, wollte ich nun noch einen Recordset einer Spalte bilden mit set fb = tb.OpenRecordSet(„Spalte2“) um dann irgendwie den letzen Wert dieses Recordsets auszulesen, aber schon diese Zuweisung funktioniert nicht. Ich bin blutiger VBA-Anfänger und habe keinen Plan, wie es weitergehen könnte. Ihr sicherlich, ich bin guter Hoffnung …

Hallo,

befürchte da zukünftige massive Probleme…

Dim Ergebnis as Variant
Dim db as DAO.Database

Ergebnis = db.OpenRecordSet(„Select F1 from Tabelle1 where F1 is not Null order by F1 desc“, dbopenSnapshot)(0)

Set db=Nothing

oder die Benutzung der DFirst , bzw. DLast-Funktion.

Hallo,

erstelle dir drei Abfragen, für jede Spalte ein, mit nur dieser einen Spalte. Natürlich sortiert.

  • öffne die entsprechende Abfrage
  • gehe zum letzten Datensatz
  • fertig

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Guten Tag,

Hallo,

befürchte da zukünftige massive Probleme…

welche und warum?

Ergebnis = db.OpenRecordSet(„Select F1 from Tabelle1 where F1
is not Null order by F1 desc“, dbopenSnapshot)(0)

Ich hab’s mal so umgesetzt wie ich es verstanden habe:

Sub test()
Dim ergebnis As Variant
Dim db As DAO.Database
Dim fn As Variant

Set db = CurrentDb()
Set tb = db.openrecordset(„Tab1“)
’ „Tab1“ ist der Name einer existierenden Tabelle in der aktuellen Datenbank
fn = „S3“
’ fn beliebiger Variablenname
’ „S3“ ist Name einer Spalte in der Tabelle tb
’ hier wird der Variablen fn ein Spaltenname direkt zugewiesen, das soll später im Programm erfolgen
ergebnis = db.openrecordset(fn, dbopensnapshot)(0)
’ MsgBox ergebnis
’ in ergebnis soll der Wert der letzten belegten Zeile aus Spalte S3 stehen
Set db = Nothing
End Sub

funktioniert aber leider auch nicht. Fehler in Zeile „ergebnis = …“. Er „findet Eingangstabelle oder Abfrage ‚S3‘ nicht“. Kann ich sogar nachvolziehen, da ich vermute, daß das Argument in db.openrecordset eine Tabelle sein muß (?).
Was habe ich an Deinem freundlichen Hinweis (für den ich mich erst mal bedanken möchte) evtl. mißverstanden?

Hallo,

Du hast etwas gründlich missverstanden (und meinen Code nicht benutzt)

Du brauchst meinen Code extra für jedes Feld (und natürlich an die Feldnamen angepaßt)

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Du hast etwas gründlich missverstanden (und meinen Code nicht
benutzt)

OK, hab’s jetzt verstanden und funktioniert nun auch. Jetzt kommt allerdings das „aber“ (und nun ahne ich, was Du mit der Befürchtung hinsichtlich „zukünftiger massiver Probleme“ gemeint haben könntest):
die Werte in den Spalten sollen Zahlen sein, die vom Programm automatisch hochgezählt werden. Also: das Programm „guckt“ in Spalte sowieso, welches der letze Eintrag ist (z. B. steht da eine „6“) und soll nun einen neuen Eintrag „7“ hinzufügen. Dazu muß ich erst mal wissen, welcher Wert der letzte ist (also das aktuelle Problem), um dann einen neuen (+1) Eintrag hinzuzufügen. Die vorliegende Lösung kann aber nur bei Werten 0 bis 9 funktionieren, da die Einträge offensichtlich als String interpretiert werden, wodurch die „10“ beim sortieren natürlich nicht erst nach der „9“ erscheint …
Hast Du da auch noch eine Idee? (Eigentlich trau ich mich schon gar nicht mehr zu fragen, aber Du hast ja ausdrücklich „feedback erwünscht“ - wofür ich sehr dankbar bin)

Hallo,

na, fragen darfst Du doch immer…

ob ich was Gescheites antworten kann, steht auf einem anderen Blatt :wink:

  1. Warum handelt es sich denn um Text, wenn Zahlen gefordert sind?
  2. Was ist der eigentliche Sinn hinter dieser Tabelle?
  3. Was ist der eigentliche Sinn dieses „Hochzählens“?
  4. Was soll überhaupt mit dieser DB (wenn man diesen Ausdruck hier gebrauchen will) passieren und was soll sie leisten?

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

da ich mein Datenbankkonzept neu überarbeitet habe, ist die eingangs gestellte Frage inzwischen hinfällig. Es würde hier auch zu weit führen, das Gesamtproblem zu beschreiben.

Vielen Dank noch mal an alle, die sich bemüht haben.

mfg cadder