[Gelöst] RecordRef: OPEN/CLOSE - Fehler

27. Dezember 2010 16:39

Hallo, miteinander!

Wir haben vor kurzem ein technisches Update (4.0 SP3 auf 6.0) durchgeführt. In einer zentralen, kundenspezifischen Funktion der Anwendung tritt seitdem folgender Fehler auf:
"Die RECORDREF-Variable wurde nicht geschlossen. Sie müssen RECORDREF mithilfe von CLOSE schließen, bevor Sie eine neue Tabelle öffnen."

Trotz intensiver Suche in den bekannten Foren konnte ich leider keine eindeutige Antwort darauf erhalten, warum die entsprechende
Programmierung unter 4.0 funktionierte und das Ganze nun auf einen Fehler läuft. Natalie erläutert in Ihrem Beitrag zum Thema
"GdPdU Export" den Unterschied zwischen der 4er und 5er-Version, der in einem CLOSE-Befehl besteht.

Die entsprechende Programmstelle schaut wie folgt aus:
Code:
SBLine.SETRANGE(Code,SBHeader.Code);
IF SBLine.FIND('-') THEN
REPEAT
  IF SBLine.Quellart = SBLine.Quellart::Kopf THEN
    QuellRefRec := HeadRefRec
  ELSE
    QuellRefRec := LineRefRec;
  BezugRefRec.OPEN(SBLine."Tabellennr.");       //BezugRefRec ist eine globale Variable vom Typ "RecordRef"
  CreateFilter;
  IF FilterText<>'' THEN BEGIN
    BezugRefRec.SETVIEW(FilterText);
    IF KTRSetup."With Default Dimensions" THEN
      GetDefaultDim;
    CreateDefaultDim;
  END;
 UNTIL SBLine.NEXT = 0;

Meine Fragen lauten nun:
- Ist die korrekte Lösung des Problems ein "BezugRefRec.CLOSE" am Ende der Schleife?
- Warum funktionierte das Ganze scheinbar unter 4.0 bzw. kann es sein, dass die 4er - Version diesen Fehler nicht erkannt hat?

Ich wäre um jeden Tipp bzw. jede Information sehr dankbar, da ich mir nicht sicher bin, ob der CLOSE-Befehl die Lösung des Problems ist.
Zuletzt geändert von StephanS am 27. Dezember 2010 19:55, insgesamt 2-mal geändert.

Re: RecordRef: OPEN/CLOSE - Fehler

27. Dezember 2010 18:56

StephanS hat geschrieben:Meine Fragen lauten nun:
- Ist die korrekte Lösung des Problems ein "BezugRefRec.CLOSE" am Ende der Schleife?
- Warum funktionierte das Ganze scheinbar unter 4.0 bzw. kann es sein, dass die 4er - Version diesen Fehler nicht erkannt hat?


Hallo Stephan,

Ursache für dieses Phänomen ist ein geändertes RecordRef-Handling seit NAV 5.0.

In deinem konkreten Fall kannst du tatsächlich durch ein BezugRefRec.CLOSE; for dem UNTIL SBLine.NEXT = 0; das Problem lösen.

Sollte diese Lösung mal nicht funktionieren, da eventuell durch eine ungünstige Programmierung (die ja nicht falsch sein muss) ein RecRef.CLOSE nicht mehr abgesetzt werden kann, so kann man sich dadurch helfen, direkt vor den RecRef.OPEN einen RecRef.CLOSE abzusetzen.
Mehrfaches RecRef.OPEN ist seit 5.0 nicht mehr erlaubt, überflüssiges RecRef.CLOSE dagegen schon ;-)

Re: RecordRef: OPEN/CLOSE - Fehler

27. Dezember 2010 19:54

Hallo, Timo!

Vielen Dank für deine aussagekräftige Antwort.
Genau dies wollte ich lesen.

Gruß aus Nürnberg
Stephan