Announcement

Collapse
No announcement yet.

EAccessViolation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EAccessViolation

    Frage : Wie vermeide ich eine Exception der Klasse EAccessViolation beim Aufruf eines neuen Formulars ? Dephi 3 oder 5 geben immer eine Zugriffsverletzung bei Adressse .... , Lesen von Adresse FFFFFFF an. Es klappt immer ein oder zweimal mit dem Aufruf, spätestens beim dritten oder bei der Rückkehr kommt die Fehlermeldung.

  • #2
    Hallo Andreas,

    Du kannst die Exception nur vermeiden, wenn Du den Fehler beseitigst, der zur Exception führt. Zugriffsfehler bei Adresse ... (an dieser Adresse entsteht der Fehler) Lesen von Adresse FFFFFF (-> Zugriff auf nil-Pointer). Versuch doch mal im Debugger die Fehlerstelle anzufahren: Programm starten, Delphi-Menü Suchen Eintrag Laufzeitfehler: hier mußt Du die Adresse ... (mit führendem $ für Hex-Konstante) eingeben. Vielleicht hilft Dir das weiter.

    Gruß Lory

    Comment


    • #3
      An einem einfachen Aufruf eines Formulars kann es eigentlich nicht liegen.
      Ist das Formular, dass aufgerufen wird, ein Dialog ?. Wird es nach Beenden ordentlich freigegeben ? Oder muss nach Aufruf des Formulars noch eine andere Aktion ausgeführt werden, z. B. das Füllen einer Liste

      Comment


      • #4
        Ich habe hier Benutzer, die auch diesen ominösen Fehler bekommen "Zugriffsverletzung bei
        Adressse .... , Lesen von Adresse FFFFFFF". Witzigerweise sind das 3 von etwa 50 Benutzern mit angeblich identischer Systemkonfiguration. In meinem Fall geschieht der Fehler schon "OnCreate" und nur, wenn das Programm ohne lokale AdminRechte gestartet wird. Da die Adresse 00000000 ist und bei mir nicht reproduzierbar konnte ich das auch nicht im Debugger nachvollziehen. Ich habe ja NT im Verdacht ...

        Comment


        • #5
          Hallo,

          ab Delphi 4 steht das <b>Remote Debugging</b> zur Verfügung, mit dem man ein Programm auf einen anderen Rechner in der Delphi-IDE im Debugger schrittweise untersuchen kann. Was wird in <b>OnCreate</b> aufgerufen? Kritische Stellen sind (unvollständige Liste):<br>
          - Zugriff auf die Registry (Lese/Schreibrechte)<br>
          - Zugriff auf Win32-Funktionen, die ein bestimmtes <b>Privileg</b> voraussetzen <br>
          - Ab Service Pack 4: Neue <b>Heap</b>-Verwaltung vom NT-Speichermanager (NTDLL.DLL), dabei werden freigegebene Speicherblöcke nicht mehr an das Ende der Liste freier Blöcke gestellt, sondern an den Anfang und somit beim nächsten Anfordern wiederverwendet

          Comment


          • #6
            Hallo,

            der Fehler geschieht höchstwahrscheinlich beim Initialisieren der BDE (mehr habe ich noch nicht rausgefunden). Die betreffenden Benutzer haben keine Schreibrechte auf die Registry, aber als Fehlerursache fällt das aus, da auch die anderen Benutzer nicht über diese Rechte verfügen. Das Programm ist sehr schlicht und führt lediglich ein paar Queries auf einer Access-Datenbank aus. Die API-Funktionen (GetUserName), die ich benutzt hatte, um zu protokollieren, wer wie oft das Programm benutzt, habe ich schon rausgeworfen, damit dieser Fehler ausgeschlossen wird und die Funktion ExecuteFile habe ich aus FmxUtils kopiert

            Comment


            • #7
              Hallo Thomas,

              Bingo: Habe ich gerade von Zugriffen auf einen ACCESS-Datenbank gelesen? Über welchen Weg (DAO oder ODBC) wird auf die ACCESS-Datenbank zugegriffen. Ich hatte vor einiger Zeit mit einem derartigen Problem zu tun, wobei sich der ACCESS-Treiber als der Schuldige herausgestellt hat. Ich muss nur mal in der Unterlagen kramen, welcher Treiber damals bei dem Fragesteller eingesetzt wurde

              Comment


              • #8
                Hallo Andreas,

                der Zugriff geschieht in diesem Fall über ODBC.
                Ein Treiberproblem kommt mir auch unwahrscheinlich vor, da das Programm ja läuft, wenn man lokale Adminrechte besitzt. Aber ein Versuch ist's wert. Ich sag Bescheid

                Comment


                • #9
                  Zuerst vielen Dank für alle Auskünfte. Das Programm arbeitet aber weder mit Access o.ä. Der Fehler tritt immer beim zweiten Aufruf des Formulars auf. Ich habe inzwischen mehere Formulare in DLL's ausgelagert und nun funktioniert alles einwandfrei.
                  AM

                  Comment

                  Working...
                  X