ADS Error 5004 - aber NetErr() merkt es nicht?

Advantage Database Server

Moderator: Moderatoren

Antworten
DelUser01

ADS Error 5004 - aber NetErr() merkt es nicht?

Beitrag von DelUser01 »

Hallo

Habe wieder einen seltsamen Fehler:

An einer bestimmten Stelle fange ich seit längerer Zeit einen "unklaren Zustand" ab, protokolliere das und starte mein Programm neu.
Bei dem "unklaren Zustand" geht es darum, dass das Programm den OrdSetFocus( nI )auf eine Index-Nr. stellen soll welcher nicht vorhanden ist. OrdCount() ist also kleiner als der gewünschte Index ( nI ).

Jetzt erst ist mir aufgefallen, das bei dem "unklaren Zustand" den ich abfange immer eine ADS Fehlermeldung mitprotokolliert wird welche ich bisher übersehen habe:

  • oADS:GetLastError() Nr: 5004
    oADS:GetMessage: Error 5004: Either ACE could not find the specified file, or you do not have sufficient rights to access the file.
Der gemeldete ADS-Fehler kann niemals an der Stelle auftreten an der ich den "unklaren Zustand" abfange. Das muss schon vorher passieren.

Zusammengefasst sieht der Ablauf wie folgt aus:
  • 1) prüfen ob der ALIAS schon existiert.
    2) existiert der ALIAS wird DbUseArea() übersprungen, sonst wird die DBF in einer leeren WorkArea geöffnet.
    3) Fehlerprüfung unter anderem mit NetErr().
    4) prüfen ob alle zur DBF gehörigen Index geöffnet sind.
    5) sind alle Index geöffnet wird OrdListAdd() übersprungen, sonst werden alle Index mit OrdListAdd() geöffnet.
    6) Fehlerprüfung unter anderem mit NetErr().
    7) prüfen ob der gewünschte Index im möglichen Bereich liegt( >0 .and. <= OrdCount() ). Hier abgefangen.
    8 ) Schlussendlich wird mit OrdSetFocus() der gewünschte führende Index gewählt.
Meine Vermutung ist, dass der bei Pkt.7 abgefangene ADS Fehler 5004 bereits bei Pkt.2) oder Pkt.5) aufgetreten ist. Sollte das so sein ergibt sich daraus, dass bestimmte Fehler des ADS nicht im NetErr() landen sondern anderweitig abgefangen werden müssen.

Somit würde sich auch der "unklare Fehler" erklären: die DB und alle Index müssten geladen worden sein - das Ist aber nicht der Fall - es ist keint Fehler aufgetreten. Der Alias existiert jedoch nicht und somit auch nicht die notwendigen Indexes.

Hat jemand so etwas auch schon beobachtet - oder fangt Ihr ADS-Fehler mit ADS-Funktionen ab und nicht nur mit Standard Xbase++-Möglichkeiten ?
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Error 5004 - aber NetErr() merkt es nicht?

Beitrag von nightcrawler »

zum Verhindern des 5004 einfach RIGHTS CHECKING abschalten. In VO wäre dies AX_RightsCheck(.F.), k.a. wie es in Xbase++ umgesetzt ist.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
DelUser01

Re: ADS Error 5004 - aber NetErr() merkt es nicht?

Beitrag von DelUser01 »

Hallo Joachim

AX_RightsCheck(.F.) werde ich einbauen.
Der Fehler kommt ja nur bei Verwendung von ADS.

Das bringt mich noch auf eine Idee:
Ich könnte ja den ADS mal ein paar Tage abschalten um zu sehen ob die verschiedenen "unklaren Fehler" weiterhin auftreten oder nicht.
Traue mich aber nicht so richtig den ADS abzuschalten - die Gewährleistung der Datenintegrität ist gerade bei solchen Programmabstürzen unbedingt notwendig. Das ist seit langer Zeit das wichtigste Argument für den Einsatz von ADS (und dann erst die Geschwindigkeit).
DelUser01

Re: ADS Error 5004 - aber NetErr() merkt es nicht?

Beitrag von DelUser01 »

Hallo

habe gerade festgestellt, dass ich dieses Problem 2013 schon einmal unter anderem Blickwinkel ins Forum geschrieben habe:
http://www.xbaseforum.de/viewtopic.php? ... tlasterror

Damals hatte ich zum Abfangen der Fehler

Code: Alles auswählen

      Begin Sequence
         DbUseArea(...)
         ...
      Recover
         ...
      End Sequence
eingebaut und damit scheinbar den Fehler behoben.
Was sich auch immer geändert hat - der Fehler ist wieder da...
DelUser01

Re: ADS Error 5004 - aber NetErr() merkt es nicht?

Beitrag von DelUser01 »

Zusatzinfo

Bei der Suche nach der Fehlerquelle habe ich festgestellt, dass ich zwar je Thread eine DacSession anlege, diese aber nicht bei DbUseArea verwendete. Habe ich inzwischen gemacht. Mal sehen...
Antworten