Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

ADS oSession:disconnect() Fehler

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 365
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Kontaktdaten:

ADS oSession:disconnect() Fehler

Beitrag von Armin » Do, 02. Jun 2016 19:08

Hallo,

ich erzeuge eine Verbindung zum ADS mit
oSession := dacSession():New( "ADSDBE", cServerDrive )

dann läuft das Programm, alles soweit gut. In meiner Beenden-Funktion mache ich dann ein

Code: Alles auswählen

IF VALTYPE(oSession)= "O" .and. oSession:isConnected()
    oSession:disconnect()
Häufig kommt dann folgende Meldung:

oError:description : Interne Datenstrukturen beschädigt
oError:filename :
oError:genCode : 41
oError:operation : dacCloseAll
oError:osCode : 0
oError:severity : 2
oError:subCode : 5
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von DACDATASOURCE:DESTROY(208)
Aufgerufen von DACSESSION:DISCONNECT(449)
...

Den Fehler bekomme ich auch, wenn ich vor dem oSession:disconnect() ein dbcloseall() ausführe.

Was läuft da falsch? Hat jemand eine Idee?

Ich habe jetzt noch weiter getestet. Wahrscheinlich hat eine DBF ein Problem, da es nicht in allen Programmen vorkommt.

Grüße, Armin

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 690
Registriert: Mi, 28. Jul 2010 17:16

Re: ADS oSession:disconnect() Fehler

Beitrag von ramses » Do, 02. Jun 2016 19:58

Hallo Armin

ich hatte auch schon öfters einige Probleme mit "Interne Datenstrukturen beschädigt" im Zusammenhang mit ADS.

Ich gehe davon aus dass du eine aktuelle Version Xbase verwendest. (Da waren doch mal einige Probleme in der ADSDBE)

Als erstes würde ich folgende DLL's überprüfen:
ace32.dll, adsloc32.dll,axcws32.dll
Dies sind die "Verbindungs" DLL's von ADS --> Alaska liefert hier leider die sehr alte Verion 7.0 v. 2003 aus. Ersetzte diese mit neueren z.b. der Version 10.10.49
Beachte die Version des ADS-Server's sollte die gleiche Version haben.

Die Verbindung erstelle ich mit:
oSession := dACSESSION():NEW( "DBE=ADSDBE;SERVER=\\192.168.23.10:6262\DATEN;ADS_REMOTE_SERVER" )

Verwendest du "alte" DBF's die z.B. noch mit Clipper erstellt wurden? Dann überprüfe den Dateiheader der Datei. Oder erstelle diese mit dbcreate( , , "ADSDBE") neu.

Seit ich dies beachte hatte ich keine Probleme mit "Interne Datenstrukturen beschädigt" im zusammenhang mit ADS mehr gehabt.

Cu Carlo

hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 157
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Kontaktdaten:

Re: ADS oSession:disconnect() Fehler

Beitrag von hschmidt » Fr, 03. Jun 2016 10:11

Hallo Armin,

auch ich hatte früher häufiger IDSC-Probleme beim Beenden der ADS-Connection über die ADSDBE und habe das deshalb auf einen DLL-Call auf die ACE32.DLL umgebogen:

Code: Alles auswählen


PROCEDURE CloseDataBases()
   LOCAL aWS, i
   LOCAL oSession
   LOCAL hServer

   hServer      := GetConnctionHandle ( )

    IF hServer > 0
        //ADS-Connection beenden
        oSession := GetsoSession ()
        IF oSession <> NIL .AND. oSession:isConnected ()

           /*
            * Absichern der shutdown-sequence vor rekursiven Fehlern
            * in DbCommit() udgl.
            */
            aWS := WorkSpaceList()
            FOR i:= 1 TO len(aWS)
                BEGIN SEQUENCE
                  /*
                   * Erzwinge das erfolgreiche Beenden aller
                   * anstehenden Record updates im aktuellen
                   * Workspace.
                   */
                   (aWS[i])->(DbCommit())
                   (aWS[i])->(DbCloseArea())
                RECOVER

                   (aWS[i])->(DbRRollback())
                   (aWS[i])->(DbCloseArea())
                ENDSEQUENCE
            NEXT

            // da die oSession:Disconnect() - Methode der ADSDBE nicht funktioniert,
            // wird hier ein DLL-Call auf die AdsDisconnect-Methode in der ACE32.DLL gemacht
            DLLCall("ACE32.DLL", DLL_STDCALL, "AdsDisconnect",hServer)
        ENDIF
    ENDIF
RETURN

hServer und oSession merke ich mir beim Connect in statischen Variablen, die ich mit den GetConnectionHandle- und GetsoSession-Funktionen auslesen kann.
Möglicherweise ist das in der aktuellen Version der ADSDBE nicht mehr erforderlich - bei mir funktioniert's jedenfalls.

Viele Grüße

Hans

Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 365
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Kontaktdaten:

Re: ADS oSession:disconnect() Fehler

Beitrag von Armin » Fr, 03. Jun 2016 14:20

Hallo Carlo und Hans,

vielen Dank!
Ich habe die Möglichkeiten getestet, aber da das dbcloseall() vor dem :disconnect() auch die Fehlermeldung "interne Datenstrukturen beschädigt" brachte, habe ich mal versucht die Workareas einzeln zu schliessen:

Code: Alles auswählen

 
          aWorkSpaceList := WorkSpaceList()
           for i:= 1 to len(aWorkSpaceList)
              (aWorkSpaceList[i])->(dbclosearea())
           next
Dabei habe ich festgestellt, dass es bei einer DBF mit 2 Memodateien passierte. Diese hatte ich noch vergessen umzukopieren. D.h. es müssen alle DBF mit 2 Memodateien mit z.B. DBFNTX geöffnet werden, die Struktur mit ADSDBE erstellt und die Inhalte einkopiert werden.
Das wußte ich eigentlich schon von einem Beitrag von Tom in diesem Forum.

Beste Grüße, Armin

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 12224
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: ADS oSession:disconnect() Fehler

Beitrag von Jan » Do, 20. Apr 2017 13:01

Hallo Hans,

schaue bitte mal dringend in deine PN...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Antworten