Liebe Access-Experten,
erstmals melde ich mich in diesem Forum. Ich bin noch blutiger Access-Anfänger und deshalb bitte ich über "dumme" Fragen großzügig hinwegzusehen. Früher habe ich einiges mit Ms Visual Foxpro gemacht, so dass mir Datenbankprogrammierung nicht völlig fremd ist. Hier nun mein erstes Ersuchen um Unterstützung:
Ausgangslage:
Hauptformular mit Dropdownfeld cmb_ArtAuswahl (Vogelarten).
Enthält Registersteuerelement (RegisterStr12).
Erstes Registerblatt (Karte_chronolog_Sort) enthält eine als Formular namens Frm_Qry_Gesamtdaten_Tbl (Datenquelle Qry_Gesamtdaten) gespeicherte Abfrage (Tabellenansicht). Verknüpfung nach cmb_Artauswahl, so dass nur die betreffende Vogelart herausgefiltert wird.
Zweites Registerblatt (einzel_chrono) enthält Textboxen, in denen die Inhalte einzelner Datenfelder des im ersten Registerblatt ausgewählten Datensatzes dargestellt werden. Steuerelementinhalt z.B. =[Frm_Qry_GesamtDaten_Tbl].[Formular]![Datum].
Ich möchte jetzt in diesem Registerblatt per Buttons durch die Datensätze navigieren können, d.h. den Datensatzzeiger im ersten Registerblatt verschieben und das zweite Registerblatt anschließend refreshen. Die aktuelle Datensatznummer (entsprechend der gefilterten Abfrage) auslesen kann ich, aber ich habe trotz langwieriger Suche nicht herausgefunden, wie ich den Datensatzzeiger per z.B. MoveNext verschiebe. Vermutlich gelingt es mir nicht, die Abfrage richtig zu referenzieren.
Die Ausgabe der aktuellen Datensatznr. von Frm_Qury_Gesamtdaten_Tbl in Registerblatt Zwei gelingt so:
Private Sub cmd_next_Click()
Dim n As Long
n = Frm_Qry_GesamtDaten_Tbl.Form.CurrentRecord 'funktioniert !
MsgBox ("Datensatz " & Str(n))
' hier in Frm_Qury_GesamtDaten_Tbl den Datensatzzeiger eins weiter (MoveNext) aber wie ??
Me.Refresh
End Sub
(dass ich BOF/EOF bei der Datensatznavigation abfangen muss, ist mir klar).
Könnte mir bitte jemand auf die Sprünge helfen. Vielen Dank Voraus!
Hi,
vermutlich hilft:
Me.Recordset.MoveNext
bzw. Me.DeinFormular.Form.Recordset.MoveNext
je nachdem wo der Button ist.
Harald
Hallo Harald, vielen Dank, das hat schon deutlich weitergeholfen, aber leider mit einem mir nicht erklärlichen Ergebnis. Nachdem ich meine Prozedur folgendermaßen umgestaltet:
Private Sub cmd_next_Click()
Dim n As Long
n = Me.Frm_Qry_GesamtDaten_Tbl.Form.CurrentRecord
MsgBox ("Datensatz " & Str(n))
Me.Frm_Qry_GesamtDaten_Tbl.Form.Recordset.MoveNext 'funktioniert nur 1x
n = Me.Frm_Qry_GesamtDaten_Tbl.Form.CurrentRecord
MsgBox ("Datensatz " & Str(n))
Me.Refresh
End Sub
Das funktioniert genau einmal. Datensatzzeiger wird im ersten Formular verschoben, Messagebox zeigt das an und nach dem Refresh stehen die richtigen Daten auch im zweiten Formular. Beim nächsten Klick auf den Button springt der Datensatzzeiger immer auf 1, egal ob ich vorher beim 2., 5. oder 100. war. Im ersten Formular ist das auch sichtbar - immer erste Zeile. Was kann das denn sein??
Danke für die Unterstützung.
Johannes
Hi Jonny,
was passiert, wenn Du das me.refresh weglässt?
Harald
Das war DER Tipp, es funktioniert einwandfrei. Warum das Refresh nicht notwendig und sogar schädlich ist, verstehe ich zwar nicht, aber egal. Es geht.
Vielen Dank Harald, das hat mir sehr geholfen.
Johannes
Hallo,
obwahl es geholfen hat, noch einige Anmerkungen.
Der Datensatzzeiger ist als Identifikationsmerkmal völlig ungeeignet.
Ein Datensatz wird ausschließlich über dessen Primärschlüssel identifiziert.
Daher wäre der PS auszulesen und auf den PS im anderen Formular zu verweisen.
Obwohl mir einige unklar ist, würde ich behaupen, das ganze Vorhaben lässt sich bei korrektem Aufbau der Tabellen und der Formulare völlig ohne VBA mit den Grundfunktionen von Access realisieren.
ZitatZweites Registerblatt (einzel_chrono) enthält Textboxen, in denen die Inhalte einzelner Datenfelder des im ersten Registerblatt ausgewählten Datensatzes dargestellt werden. Steuerelementinhalt z.B. =[Frm_Qry_GesamtDaten_Tbl].[Formular]![Datum].
Wenn das zweite Registerblatt Felder des 1. Registerblattes enthält, musst Du doch einfach nur ein 2. Unterformular verwenden das die gewünschten Felder enthält.
Irgendwie scheint mir der ganze Aufwand überflüssig.
Zunächst hatte ich auch versucht, für die Tabelle ein zweites Registerblatt anzulegen, in dem die normale Formularansicht mit den Datenfeldern eines Datensatzes angezeigt werden, aber das ist mir irgendwie nicht gelungen. Ich konnte nicht die Formularansicht einstellen. Bin eben Anfänger :-\
p.s. schon wieder die Abfrage, wo der Weihnachtsmann angeblich lebt. Könnte mir das netterweise mal jemand verraten. Jedesmal muss ich etliche Fehleingaben machen, bis ich eine beantwortbare Frage bekomme >:(
Hi,
vielleicht kann Dir besser geholfen werden, wenn Du eine komprimierte und gezippte Datenbank (aber bitte im accesss 2003-Format) hier zur Verfügung stellst.
Harald
Ganz herzlichen Dank für das Hilfsangebot. Vielleicht komme ich morgen dazu, die accdb in das mdb-Format umzuwandeln (arbeite mit Access 2010) und vorher noch die Datensatzmenge zu reduzieren.
Gute Nacht!