Announcement

Collapse
No announcement yet.

Zugriffsverletzung in IDAPI32.DLL bei OsWsFree

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

  • Zugriffsverletzung in IDAPI32.DLL bei OsWsFree

    Bei einem SQL-Befehl mit der BDE liefert mein Programm seit kurzem immer wieder denselben Fehler:

    * beim Start aus der IDE heraus:<br>
    <b>Zugriffsverletzung</b> bei Adresse 4B E3 46 A7 in Modul IDAPI32.DLL<br>
    (Wenn ich das Debug-Fenster 'CPU' richtig verstehe, handelt es sich um die interne Funktion OsWsFree.)<br>
    Schreiben von Adresse 3F 51 4B 34

    * anschließend folgt:<br>
    <b>Zugriffsverletzung</b> bei Adresse 4B E3 47 2F in Modul IDAPI32.DLL<br>
    Schreiben von Adresse 3F 51 4B 33

    Beim direkten Start über Windows entfällt die erste Zugriffsverletzung.

    <b>Situation:</b>

    * Das Programm erzeugt eine neue Tabelle.<br>
    * Mit einem SQL-Befehl 'INSERT INTO...' werden viele Datensätze in diese Tabelle eingetragen.<br>
    * Mit einem weiteren SQL-Befehl 'INSERT INTO...' sollen sehr viele weitere Datensätze in diese Tabelle eingetragen werden; dies führt zu dem genannten Fehler.

    Bei einer vorherigen Programmversion hatte dies einwandfrei funktioniert. Die Ausführung des zweiten SQL-Befehls durch die Borland-Datenbankoberfläche hat manchmal Erfolg, meistens nicht.

    Bei der vorherigen Programmversion war das Gerüst des SQL-Befehls direkt im Quelltext enthalten; jetzt wird dieser String aus einer Art Ini-Datei eingelesen. Aus diesem 'Gerüst' wird mit dem Format-Befehl der eigentliche SQL-Befehl erzeugt; dieser selbst ist einwandfrei.

    Woran kann der Fehler liegen? Wie kann ich die genaue Situation suchen? Wie kann ich ggf. das Problem umgehen?

    Umgebung:<br>
    Windows XP Pro<br>
    Delphi 5.01 Pro (03.02.2000)<br>
    BDE Version 5.1.1.1 vom 12.11.1999 (vorher 5.1.0.4 vom 21.06.1999)<br>
    (Assembler kann ich zwar minimal lesen, aber fast gar nicht verstehen.)

    Ich wollte ein Update auf BDE-Version 5.2 vornehmen, aber das habe ich auf den Borland-Seiten nur als 'Merge-Modul' gefunden, aber nicht als BDE-Installation.

    Wer kann mir helfen? Danke im Voraus!

  • #2
    <b>Zusatzproblem: Operation nicht anwendbar</b>

    Im weiteren Programmablauf wird folgender SQL-Befehl innerhalb des Programms nicht ausgeführt (aber kein Problem bei der Datenbankoberfläche):

    INSERT INTO "F:\Hilfsprogramme\Testdaten\Daten\1\VS-Sel-Temp.DB"<br>
    ( Multi,<br>
    PLZ,<br>
    PLZ_Anzahl,<br>
    Adr,<br>
    Ex )<br>
    SELECT Versand_Multi,<br>
    Stufe_2,<br>
    COUNT( Versand_PLZ ),<br>
    CAST( SUM(PLZ_Adr) AS INTEGER),<br>
    CAST( SUM(PLZ_Ex ) AS INTEGER)<br>
    FROM "F:\Hilfsprogramme\Testdaten\Daten\1\VS-Sel-Versand.db"<br>
    WHERE ( ( Versand_Teil = 1 )<br>
    AND ( Stufe_2 <> "" ) )<br>
    GROUP BY Versand_Multi, Stufe_2;

    Mit anderen Parametern wird dieser Befehl auch im Programm erledigt. Ich verzweifle langsam, wenn ein SQL-Befehl mal funktioniert und mal nicht...

    Wer kann mir helfen?

    Comment


    • #3
      Hallo,

      &gt;..sollen sehr viele weitere Datensätze in diese Tabelle eingetragen.

      Wenn die Paradox-Datenbank auf einer NTFS-Partition liegt, kommt es immer dann mit hoher Wahrscheinlichkeit zu Problemen, wenn sehr viele Datensätze hintereinander eingefügt werden

      Comment


      • #4
        Danke für diesen Hinweis; das kann es sein. Aber das ist ja ziemlich katastrophal:

        * Wer denkt denn an so etwas?!

        * Haben Sie selbst Erfahrungswerte oder davon gehört, bei welcher Anzahl zusätzlicher Datensätze die BDE aussteigt?

        * Gibt es Tricks, dieses Problem zu umgehen?

        Danke für weitere Tipps

        Comment


        • #5
          Hallo Jürgen,

          die BDE ist schon seit langen ein Auslaufmodell und wird nur noch zwecks Altkompatiblität mitgeliefert. Es werden seit Jahren nur noch minimale Anpassungen vorgenommen. Und so kommt es vor das mit neueren Windows-Versionen (und vor allem auch im Netzwerkbetrieb) durch leicht geänderte Spielregeln (optimistische Sperren zur Performanceverbesserung im Netzwerk, ...) kommt die mittlerweile hoffnungslos veraltete BDE aus dem Tritt.

          Sinnvoll ist es m.E. (falls die Anwendung noch längere Zeit im Einsatz ist) auf einen BDE Erstatz umzusteigen, welcher Paradox und/oder DBase-Dateien lesen und schreiben kann. Dies erfordert jedoch einiges an Umstellungsarbeiten (und den Einsatz von ein paar €)

          Comment


          • #6
            Hallo,

            &gt;Gibt es Tricks, dieses Problem zu umgehen?

            um zu prüfen, ob diese Anomalie die Ursache des Problems ist, sollte die Paradox-Datenbank versuchsweise auf eine FAT16-Partition ausgelagert werden. Wenn sich dann allerdings die Vermutung bestätigt, gibt es keine Abhilfe (außer dem Auslagern auf eine FAT16-Partition)

            Comment


            • #7
              BDE veraltet: Das ist mir bewusst; deshalb bin ich eigentlich am Umsteigen auf Interbase/Firebird. Aber eine 'Spar-Version' meines Programms muss (lokal) mit verschiedenen dBase- und Paradox-Dateien arbeiten; und dafür ist die BDE natürlich das praktischste.

              Trotzdem danke für die Hinweise (das mit FAT16 werde ich einmal probieren).

              Jürgen Thoma

              Comment

              Working...
              X