Office: (Office 2010) Kein aktueller Datensatz im Recordset

Helfe beim Thema Kein aktueller Datensatz im Recordset in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Guten Morgen Community, ich brauche mal dringend eure Hilfe. Ich bastel gerade an einem Algorithmus, der mit einem Recordset arbeiten und folgendes... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von DizzoR, 15. September 2015.

  1. Kein aktueller Datensatz im Recordset


    Guten Morgen Community,

    ich brauche mal dringend eure Hilfe. Ich bastel gerade an einem Algorithmus, der mit einem Recordset arbeiten und folgendes bewirken soll:

    In dieser Tabelle:

    Kein aktueller Datensatz im Recordset 23135515pf.jpg


    .. soll er für jede SAP-Nummer in Spalte sapsys_SAPNr, die in Spalte sapsys_AEMenge eine -1 heißt, in der Vergangenheit nachschauen mit Hilfe des Datums in Spalte sapsys_date, ob es die SAP-Nr davor schon mal gab.
    Wenn nicht, soll er in Spalte sapsys_Status ein "no touch" schreiben.
    Wenn es sie aber gibt und sie hat eine 1 in sapsys_AEMenge stehen, dann soll er gucken: ist die SAP-Nr mit der 1 im gleichen Fiscal Year oder in dem davor. Wenn davor, soll er bei Status schreiben: "cancelled past year", wenn in gleichen Jahr, dann "cancelled".

    Jedoch habe ich gerade das Problem, dass ich einen Laufzeitfehler 3021 bekomme: Kein aktueller Datensatz. Und er verweißt auf diese Zeile:

    Kein aktueller Datensatz im Recordset 23135548rv.jpg


    Ich habe gerade keine Ahnung, wie ich das fixen soll. Das hier ist mein Code:
    Code:
    Ich hoffe, ihr könnt mir helfen. Habe leider noch nicht so viel mit Recordsets gearbeitet *frown.gif*

    :)
     
  2. Hallo,
    Das 2. "Do While not rs.eof..." ist überflüssig da EOF ja bereits geprüft wurde.
    Ändere es einfach in ein If um:
    if nbr = sapsys_SAPNr And fisc = !sapsys_fy then
    ...
    End if

    Statt ! könntest du auch .Fields(..) schreiben.

    Gruß Andreas
     
    avogt_at_home, 16. September 2015
    #2
  3. Danke für deine schnelle Antwort, Andreas!

    Ich hab's mal so abgeändert. Das Loop musste ich rausnehmen, weil ich das Do While rausgenommen habe.

    Nur was ist denn mit dem gelb markierten Zeile in der Else-Schleife?
    Ich habe jetzt herausgefunden, dass, wenn ich das And nbr = !sapsys_SAPNr hinter Do While Not weglasse, dann klappts.

    Aber muss ich nicht für nbr die Werte, also SAP-Nummern haben, die er bis zum Ende durchgeht?
     
  4. Kein aktueller Datensatz im Recordset

    Nochmal deutlich: Deine Schleifen-Bedingung tritt auf einen Fehler, weil das rst.EOF erreicht wurde. Kann dann noch Code:
    ein Ergebnis liefern?
     
  5. Hm, nein kann nicht. Hab's gelöscht.

    Jedoch funktioniert der Code noch nicht ganz so richtig, wie er soll *frown.gif*
    In meiner Tabelle habe ich 124 Datensätze und er hat nur bei 3 den Status geändert und den Rest nicht angefasst.

    Ist noch irgendetwas falsch an dem Code? Ist jetzt mein erstes Mal, dass ich mich mit Recordsets beschäftige, also ich muss dazulernen *biggrin.gif*
     
  6. Dann ist wohl das Schleifendrehen im Recordset Bedingung?

    Es wäre aber einfacher und in jedem Falle schneller, wenn man zwei, drei Aktualisierungabfragen laufen lassen würde.

    //EDIT1:
    Für den ersten Fall bspw. etwa
    Code:
    //EDIT2:
    Vielleicht legt man aber auch eine zusätzliche Tabelle mit einer ID und den Einträgen "no touch" usw. an, berechnet in einer Abfrage aus den verschiedenen Bedingungen jeweils einen Zahlenwert, der mit der ID der neuen Tabelle korrespondiert, und verknüpft dann das Ganze.
    Dann hätte man das Ganze dynamisch und müsste nicht bei Änderungen / neuen Datensätzen Editierungen an vorhandenen Datensätzen vornehmen.
     
  7. ebs17, ich bin ganz bei dir, wenn es schneller und einfacher geht *Smilie
    Bitte kläre mich auf, wie ich das mit den Aktualisierungabfragen machen kann.

    Würden die denn zu dem gleichen Ergebnis kommen, was ich in meinem Eingangspost beschrieben habe?
     
  8. Kein aktueller Datensatz im Recordset

    Ich habe meinen obigen Beitrag schon ergänzt (zweimal). Mal nachschauen.
     
  9. \@ebs17: Ich finde deine Idee besser! *Smilie Das macht das ganze dynamischer und ich brauche weniger Code-Gefrickel.

    Ich habe jetzt 3 Queries erzeugt und den Code leicht angepasst. Beim Ausführen werden aber immer die gleichen Datensätze geändert.
    Zudem habe ich es noch um das Fiscal Year ergänzt, weil er ja hier auch den Vergleich ziehen soll, ob der Auftrag im vorherigen FY schon mal existiert hat bzw. dort gecancelt wurde.

    Allerdings bin ich mir nicht sicher, ob es funktioniert. Erste (vll dumme) Frage vorweg: Kann ich das FY als Text-Dateityp in der Tabelle speichern, oder muss ich es als Datum/Uhrzeit speichern?

    Mein Code für die Query, in der der Auftrag letztes Jahr gecancelt wurde, sieht so aus:
    Code:
     
  10. Bei gleichem Filter sollte das so sein.
    Daher mehrere Abfragen mit unterschiedlichem Filter.

    Ein Jahr ist eigentlich eine vierstellige Ganz-Zahl?

    Datentypen in Access:
    Long (=> 4 Byte) ... fasst bis etwa 2,14 Mrd.
    Integer dann etwas weniger
    Text (=> 2 Byte pro Zeichen + 10 Byte für Verwaltung)
    Die Bytezahlen sind weniger interessant für den belegten Speicher für die Ablage, da ist regelmäßig genügend Speicher vorhanden.
    Bei Filterungen/Vergleichen heißt aber mehr Bytes => mehr Arbeit => mehr benötigte Zeit.

    Ergo: Machen kann man vieles, aber sinnvoll (effizient?) sollte es auch sein.


    Und eigentlich lässt sich das Fiskaljahr aus dem Datum berechnen (eine Regel, von wann bis wann solch ein Jahr geht, habt Ihr sicherlich) und muss daher nicht separat in der Stammdatentabelle gespeichert werden (Redundanz).
    Ich würde hier sehr schnell die Zusammenarbeit mit einer Kalendertabelle suchen, wo dann zu jedem Datum in einem zusätzlichen Feld das Fiskaljahr enthalten ist, insbesondere bei zu erwarten größeren Datenmengen (nachschlagen ist schneller als jedes Mal neu rechnen, zzgl. Indexnutzung).
     
  11. Ich habe jetzt 3 Abfragen mit unterschiedlichem Filter, wobei ich immer nur das Kriterium Fiscal Year geändert habe.

    Z.B. sieht der Filter so aus, wenn geschaut werden soll, ob es einen Auftrag im gleichen Jahr schon mal gab: B.sapsys_fy = A.sapsys_fy

    Das Fiscal Year sieht so aus: 14/15 .. und wird so als Text-Datentyp in der Tabelle gespeichert. Weil es aber dadrin ein "/" gibt, kann ich es nur als Text speichern.

    Eine Datum-Tabelle habe ich auch in meiner DB. Dort wird nur über den Kalendertag per Query folgende 4 Dinge berechnet: Monat (Jul 15), Fiscal Year (14/15), Kalenderwoche (CW 30) sowie Quartal (Q3).

    Nur verstehe ich nicht, warum er trotzdem immer die gleichen Datensätze berührt. Ein AND verbindet doch alle Bedingungen, daher kann es doch nicht sein, wenn B.sapsys_fy = A.sapsys_fy oder B.sapsys_fy A.sapsys_fy verlangt wird.. dann müssen doch unterschiedliche Nummern geändert werden oder nicht?
     
  12. Du verläufst Dich nicht selber in selbst formulierten Bedingungen?
    Ich kann das logischerweise nicht gut einschätzen.

    ... ist logischerweise Text.

    Kalenderwoche und Quartal wären für mich aber Zahlen zum Speichern und Rechnen, und für eine Darstellung nach außen kann man dann die (konstanten) Buchstaben hinzuverknüpfen.

    Logik: Wenn man auf ein anderes Fiskaljahr prüft, wird das Datum in jedem Fall anders sein und muss nicht parallel geprüft werden.
     
  13. Kein aktueller Datensatz im Recordset

    Ich muss zugeben, ich bin gerade etwas überfordert, weil ich nicht weiß, wo ich genau ansetzen soll (und weil ich auch den Kram morgen fertig haben soll).

    Also, ich kann nach dem FY sortieren (aufsteigend, absteigend). Das heißt, ich könnte es als Kriterium zur Unterscheidung nutzen.

    Als einzige Bedingung habe ich nur noch das FY hinzugezogen, um zu überprüfen, ob sich eine SAP-Nummer in einem FY davor befindet.

    1 und -1 sind ungleich und es gibt nur diese beiden Ausprägungen in der Spalte.

    Ich möchte jetzt gerne auf deine Query-Methode setzen und mich der drei Queries bedienen, die ich für jeden einzelnen Fall (cancelled, cancelled past year und no touch) angelegt habe.

    Das Problem ist bis jetzt, dass wie gesagt immer die gleichen Datensätze berührt werden, ob die Bedingungen leicht anders sind. Ich habe mir mal Unterabfragen mit NOT EXISTS angeschaut und deine Query macht auch Sinn, nur wieso sind es bei allen immer dieselben Datensätze? Muss ich noch was angeben als Bedingung?
     
  14. Code:
    Wobei hier vergangene Jahre erfasst werden, nicht nur das Vorjahr.
    Wenn nur das Vorjahr auszuwählen ist, müsste man eine sinnvolle und selbstverständlich einfache Berechnung finden, mit der man von 14/15 auf 13/14 usw. schließen kann. Vorhahr = AktJahr -1 reicht ja nicht.
    Code:
    Was ist anders: Im ersten Fall sollte es keinen Vorgänger geben (=> NOT EXISTS). In den beiden anderen Fällen muss es ja Vorgänger geben ( NOT ).
     
  15. Vielen Dank dafür, ebs17! *Smilie

    Es sollten sogar vergangene Jahre erfasst werden, von daher alles gut. Nur wenn ich deine beiden Queries ausführe, aktualisiert er mir 0 Zeilen. Was ja nicht sein kann bei über 1000 Datensätzen. Bei der no touch Query werden 100 Datensätze aktualisiert, wobei das alle sind, die eine -1 haben. Aber nicht alle Nummern davon haben keinen Vorgänger.

    Ich weiß, du hast mir gerade echt geholfen, nur ich verstehe nicht, warum er mir da so wenig aktualisiert. Ich denke, das liegt am FY oder?

    Edit//

    Wenn ich die Query so abändere, aktualisiert er mir 144 Datensätze, fast alle mit -1:
    Code:
     
Thema:

Kein aktueller Datensatz im Recordset

Die Seite wird geladen...
  1. Kein aktueller Datensatz im Recordset - Similar Threads - aktueller Datensatz Recordset

  2. Aktuellen Datensatz als E-Mail-Text verschicken

    in Microsoft Access Hilfe
    Aktuellen Datensatz als E-Mail-Text verschicken: Hallo beisammen, ich bin grad am verzweifeln: ich hab zwar Access seit Jahren auf dem Rechner (durch Office365/M365) aber habe mich noch nie damit befasst - "Excel kann ja alles". Nun ja Access...
  3. Kein aktueller Datensatz

    in Microsoft Access Hilfe
    Kein aktueller Datensatz: Hey, ich habe bei einem Formular einen extra Button gecoded bei dem man etwas Ausführen kann. Es funktioniert auch immer, es sei denn, es wird ein neuer Datensatz angelegt. Im Formular steht...
  4. Endlosformular: Buttons nur für aktuellen Datensatz sichtbar

    in Microsoft Access Hilfe
    Endlosformular: Buttons nur für aktuellen Datensatz sichtbar: Hallo, in meinem Endlosformular habe ich einige Buttons für Anzeigen, Löschen etc. hinterlegt. Das ergibt eine ganz lange Reihe von Buttons für die angezeigten Datensätze. Eine weitaus schönere...
  5. Aktuellen Datensatz kopieren und ans Ende Einfügen

    in Microsoft Access Hilfe
    Aktuellen Datensatz kopieren und ans Ende Einfügen: Hallo, ich möchte in meiner Datenbank einen Button haben der den Aktuellen Datensatz kopiert und ans Ende Einfügt. Wenn möglich sollte noch in einem Feld das aktuelle Datum eingetragen werden und...
  6. Mehrere Datensätze markieren, kopieren und mit aktuellem Datum einfügen

    in Microsoft Access Hilfe
    Mehrere Datensätze markieren, kopieren und mit aktuellem Datum einfügen: Hallo zusammen, ich habe ein Problem, bei dem ich gerade leider nicht weiter komme. Ich habe eine Access-Datenbank erstellt, in der u.a. täglich mehrere Datensätze kontrollierter Bauteile...
  7. Bericht nur mit aktuellem Datensatz aus Formular anzeigen und drucken

    in Microsoft Access Hilfe
    Bericht nur mit aktuellem Datensatz aus Formular anzeigen und drucken: Guten Tag, ich habe eine Datenbank im Rahmen meiner Ausbildung zum Industriekaufmann erstellt. Diese Datenbank beinhaltet z.B. die Tabellen: mitarbeiter, psaArtikel, psaPosten,psaAusgabe. Die...
  8. Neues Formular mit aktuellem Datensatz öffnen

    in Microsoft Access Hilfe
    Neues Formular mit aktuellem Datensatz öffnen: Hallo zusammen, ich bin Access-Einsteiger und auf ein Problem gestoßen, das mir schon etwas länger zu schaffen macht. Leider habe ich frühere Lösungsvorschläge bisher nicht erfolgreich umsetzen...
  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