Office: (Office 2010) Recordset wird nicht erfasst

Helfe beim Thema Recordset wird nicht erfasst in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Liebe Access-Profis, wieder bin ich am Ende der Weisheit; dieses Mal geht es um einen VBA-Code, der einen Recordset nicht identifiziert. Das Vorhaben:... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von gromax, 19. Oktober 2020.

  1. Recordset wird nicht erfasst


    Liebe Access-Profis,
    wieder bin ich am Ende der Weisheit; dieses Mal geht es um einen VBA-Code, der einen Recordset nicht identifiziert.

    Das Vorhaben:
    Im Formular 'Aktuelles Schuljahr' steht in der Zeile 'VKL-Klasse' ein Eintrag in der Spalte 'Kommentar' ("lt. SSA-Bescheid v. 4.4.2020"), den ich in das 2. Formular per Doppelklick übertragen möchte.

    Mein Code im Doppelklick-Ereignis des Zielfeldes 'ZUERP_Beschreibung':
    Code:
    erkennt den vorhandenen Eintrag in der Tabelle 'tbl_ZUWERLASSE' nicht (rcsUebertrag.RecordCount=0), obwohl der Eintrag in der Tabelle vorhanden ist.
    Woran kann das liegen?
    Vorab vielen Dank!
    gromax

    :)
     
  2. Wenn du den letzten Datensatz erwischt ist EOF auch WAHR.
    Ich gehe davon aus, dass du nur 1 Datensatz zurück bekommst und dieser BOF und EOF gleichzeitig ist.
    Um festzustellen ob es einen Record gibt müsstest ans Ende des Recordsets springen und dann den Count überprüfen.
     
  3. Du meinst sicher das richtige, argumentierst aber falsch:

    Wenn nur 1 Datensatz existiert, bedeutet BOF, dass die aktuelle Datensatzposition vor und EOF, dass diese hinter diesem liegt.

    Der Datensatzzeiger zeigt in beiden Fällen nicht auf diesen einen Datensatz.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  4. Recordset wird nicht erfasst

    Hallo,
    Wenn ZUWER_SCH_FS und/oder ZUWER_ERART_FS und/oder ZUWER_SchJ Zeichenfolgen sind, fehlen die "'" vor und hinter den Vergleichswerten aus dem Formular. "strSchuljahr" ist schon mal in jedem Fall ein String.

    Falsche Syntax in der Query war schon immer eine gute Methode, keine passenden Datensätze zu finden. *tongue.gif*

    Gruß
    Fred
     
    Fred_BS, 21. Oktober 2020
    #4
  5. Vorab vielen Dank für die Antworten!

    Ich muss bekennen, Ihr beide erschüttert meine Grundfesten; wenn ich den RecordCount auslese, dann zeigt der Wert mir 0 Datensätze an. Einen MoveLast-Vorgang kann ich auch nicht auf rufen, dieser zeigt mir den Laufzeitfehler '3021' (Kein aktueller Datensatz).

    Heißt das final, dass ein RecordCount=1 gar nicht darstellbar ist???
    Das kann fast nicht sein.

    Wie kann ich denn dieses Problem lösen und eben den einzigen DS "identifizieren"?

    Viele Grüße
    gromax
     
  6. Hallo Fred,

    Dein Einwand ist berechtigt, nur er trifft hierbei nicht zu!
    Ob mit det Datentypwandlung "CSt" oder nur der Funktionaufruf SchuljahrAktuell(Date) hat keine Auswirkungen, das habe ich schon ausprobiert; die Felder mit den ...-FS-Endungen sind immer Fremdschlüssel, also Zahlenwerte - auch hier dürfte der Einsatz der Apostrophe nicht angezeigt sein?

    Was jetzt?
    Der Fehler muss doch woanderst liegen.

    Alles Gute
    gromax
     
  7. Hallo,

    wenn Du einen einzigen DS im Recordset geliefert bekommst, gibt es natürlich den Wert 1 für RecordCount. RecordCount liefert übrigens erst dann einen zuverlässigen Wert, wenn Du mit rs.movelast auf den letzten DS gegangen bist.

    In Deinem Code prüfst Du gar nicht, ob es einen oder mehrere DS gibt, Du prüfst, ob Du auf EOF bist, also hinter dem letzten DS. Das ist unmittelbar nach dem Öffnen des Recordsets immer dann der Fall, wenn es im Recordset keinen Datensatz gibt.

    Korrigiere erst mal die fehlerhafte Zuweisung an strSQLUebertrag und schau, was Dein Recordset dann liefert.

    Gruß
    Fred

    P.S.: CStr macht aus jeder Zahl einen String. Wenn Du den mit einer Zahl vergleichst, ergibt das kein Ergebnis. Schau Dir mal im Debugger an, welche Werte in Deinen Feldern zur Laufzeit stehen und was für Datentypen das sind.
     
    Fred_BS, 21. Oktober 2020
    #7
  8. Recordset wird nicht erfasst

    Hallo,

    ich habe das Geheimnis des EOF möglicherweise gelöst - es gibt einfach keinen passenden Datensatz. Dein Code nimmt nicht das Schuljahr, das man im Formular sieht, sondern es errechnet immer das aktuelle Schuljahr basierend auf dem jeweiligen Tagesdatum. Wenn man im Formular 2021/22 sieht, sucht das Programm trotzdem nach 2020/21 - und findet genau nichts. Für 2021/22 gäbe es einen Datensatz... Überdenke Deine Logik, wie Du wonach suchst.

    Die Funktion SchuljahrAktuell() benötigt keine Umwandlung mit Cstr() mehr, da sie sowieso einen String zurückliefert, dafür sollte sie dringend von dem hartcodierten Schuljahreswechsel am 1.8. befreit werden.

    Gruß
    Fred
     
    Fred_BS, 21. Oktober 2020
    #8
  9. Wenn man sich mal den string debuggen lässt, sieht das so aus:
    2020/21 ist ein String und muss wie schon erwähnt in Hochkomma gesetzt werden.
    Im Else teil haste dann nochmal den gleichen Fehler
    Code:
    Ist im Code überflüssig und verhindert, dass die Objekte sauber geschlossen werden.
    Warum du 2 Recordsets dimensionierst erschließt sich mir nicht.
    Genauso wenig, warum du 2 String-Variblen einsetzt.

    Mit fields(0) oder fieldl(5) zu hantieren, halte ich für fehleranfällig,
     
    fredfred, 21. Oktober 2020
    #9
  10. Hinzu kommt, dass im ELSE Teil auf ein nicht vorhandenes Feld referenziert wird.

    ZUWER_PROGFS -> ZUWER_ERART_FS

    DAs Vorhandensein von 2 identischen Tabellen scheint mir überflüssig.
    Der Unterschied der Datensätze, die die Zuweisung zur einen oder andere Tabelle bedingt, würde man in einer einzigen Tabelle in einem Feld kennzeichnen.

    Tbl_ZUVERLAESSE und TBL_ZUVERLAESSE_PROG
     
    fredfred, 21. Oktober 2020
    #10
  11. Hallo Fred,
    toll, dass Du dich so in meine DB reigearbeitet hast!
    Der Eintrag im Feld [ZUWER_SchJ] bedarf tatsächlich der Hochkommata – ebenso im Else-Teil des Codes. Habe ich gemacht und es funktioniert! Super!
    Warum habe ich 2 Recordsets dimensioniert?
    Na, da muss ich die Unlogik einräumen, die ich im Beispiel ausgeführt habe; da habe ich fälschlicherweise nur in einer Tabelle (tbl_ZUWERLASSE) gearbeitet, was natürlich unsinnig ist.
    Da ich in zwei Tabellen (tbl_ZUWERLASSE & tbl_ZUWERLASSE_Prog) arbeite, dachte ich, ich brauche doch zwingend zwei verschiedene Definitionen, die ich gleichzeitig verfügbar habe und eben mit 'Fields(0)' und 'Fields(5)' gleichsetze. Falsch gedacht?
    Hierzu nehme ich gerne Ratschläge entgegen!

    Im Besonderen habe ich nicht verstanden, was Du mit der Befreiung meiner Funktion SchuljahrAktuell() vom "hartcodierten Schuljahreswechsel am 1.8." meinst? Da bin ich sehr gespannt für weiterführende Tipps - zumal ich diese Berechnungen ja grundlegend brauche!

    Ansonsten Dir alles Gute und nochmals vielen Dank!
    gromax
     
  12. Meiner Meinung nach tut der ganze Code in weiten Teilen nicht das, was du eigentlich geplant hast.
    Aber das hat glaube ich Fred_BS schon dargestellt.

    Um zu prüfen, ob ein Kommentar vorhanden ist, den man duplizieren kann, prüfst du einfach den aktuellen Datensatz. Dein Datensatzzeiger steht doch schon auf dem zu duplizierenden Kommentar.

    Danach machst eine UPDATE-Abfrage auf den Zieldatensatz. Über REcordsAffected kannst du auswerten, ob es einen Zieldatensatz gab und somit deine Erfolgs- oder Misserfolgsmessage generieren.

    Grundsätzlich würde ich das Schuljahr 2020/21 usw. als eigene Tabelle auslagern, hier ein Datum für den Schulbeginn festelegen und über das Datum (oder über das Jahr des Beginns) den Datensatz festlegen, in den der Kommentar zu schreiben ist.
    Diese Zusammensetzerei per String scheint mir doch recht umständlich.
     
    fredfred, 21. Oktober 2020
    #12
  13. Recordset wird nicht erfasst

    Hallo,

    in Deiner Funktion SchuljahrAktuell() fragst du hartcodiert ab, ob das Datum vor dem 1.8. eines Jahres liegt:
    Ein neues Schuljahr dürfte aber nicht immer am 1.8. beginnen, schon gar nicht bei unserem Kultushoheit-Flickenteppich in Deutschland. Südlich des Weißwurst-Äquators hat es das in den letzten 50 oder mehr Jahren nicht gegeben. Da wäre eine Tabelle sinnvoll, in der für jedes Jahr der Tag des Beginns eines neuen Schuljahres eingetragen wird. Da das für 1 Jahr pro Bundesland immer nur 1 Datum ist, das auch in der Regel rechtzeitig bekannt ist (nicht so rechtzeitig wie Weihnachten, aber immerhin...), kann diese Information frühzeitig erfasst und damit auch verwendet werden.

    Unabhängig davon halte ich es generell für fragwürdig, abhängig von aktuellen Tagesdatum für ein feststehendes Schuljahr irgendwelche Informationen herauszusuchen.

    Gruß
    Fred
     
  14. Hallo,
    Oder eine Kalendertabelle. Da kann man zu jedem Tag das Schuljahr
    speichern. Ausserdem kann man in so einer Tabelle auch gleich die
    Ferien und Feiertage eintragen.
    Schaust du auch hier.

    gruss ekkehard

    p:s: editiert, falsches Zitat korrigiert
     
    Beaker s.a., 22. Oktober 2020
    #14
  15. Hallo Fred,

    vielen Dank für Deine Ausführung; verwaltungstechnisch beginnt das neue Schuljahr immer am 01. August eines Jahres und zwar in jedem der Bundesländer. So haben es die Bundesländer 1955 im 'Hamburger Abkommen' festgehalten; das, was Du meinst, ist der tatsächliche Unterrichtsbeginn. Dieser variiert tatsächlich von Bundesland zu Bundesland; er interessiert hier aber nicht wirklich.

    Trotzdem vielen Dank für Deine Einlassung
    gromax
     
Thema:

Recordset wird nicht erfasst

Die Seite wird geladen...
  1. Recordset wird nicht erfasst - Similar Threads - Recordset erfasst

  2. Apostroph in sql Recordset

    in Microsoft Access Hilfe
    Apostroph in sql Recordset: Hallo Gemeinde, einen hätte ich noch: sqlTitel = "SELECT * FROM tbl_Files_Edited WHERE Titel='" & strTitel & "'" Set rs1 = db.OpenRecordset(sqlTitel) Enthält strTitel einen...
  3. Recordset auf einmal nicht mehr aktualisierbar

    in Microsoft Access Hilfe
    Recordset auf einmal nicht mehr aktualisierbar: Hallo, ich bin bei der Weiterentwicklung einer seit Jahren funktionierenden Prozedur, bei der u.a. per SQL Datensätze nach einem bestimmten Feld sortiert aus einer Tabelle in ein Recordset...
  4. Recordset

    in Microsoft Excel Hilfe
    Recordset: Hallo Zusammen, ich möchte gern aus einer Excel-Tabelle Werte über ein Recordset in eine Access Tabelle einlesen. In der Anlage die vereinfachte Struktur der Daten. Im Bsp 1 werden die Daten...
  5. Recordset-Feldname mit Variable verbinden

    in Microsoft Access Hilfe
    Recordset-Feldname mit Variable verbinden: Hallo, hat jemand einen Tipp für mich, wie ich einen Recordset-Feldnamen mit einer Variablen kombinieren kann. Ein Pivot-Recordset stellt mir Feldnamen zur Verfügung, die etwa so aussehen:...
  6. Recordset Listenfeld füllen

    in Microsoft Access Hilfe
    Recordset Listenfeld füllen: Hallo *Smilie Ich möchte gern mein Listenfeld füllen.. ______________ 1) Bei dieser Methode kommt es (willkürlich) zu einem Absturz: Set Forms("Freigabetool").Controls(liste0).Recordset = rs...
  7. Recordset-Eigenschaft

    in Microsoft Access Tutorials
    Recordset-Eigenschaft: Recordset-Eigenschaft Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  8. ID aus SQL Recordset ermitteln - Geänderter Treiber?

    in Microsoft Access Hilfe
    ID aus SQL Recordset ermitteln - Geänderter Treiber?: ch habe ein akutes Problem beim Zugriff auf den SQL Server. Seit vielen Jahren nutze ich folgendes Prinzip. Im VBA lege ich einen neuen Datensatz in einem Recordset an. Da der SQL Server die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden