Announcement

Collapse
No announcement yet.

Zugriffsverletztung bei close einer ADOQuery

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

  • Zugriffsverletztung bei close einer ADOQuery

    Hallo zusammen,

    ich hoffe ihr könnt mir helfen, sitzte schon einige Tage über diesem Problem ohne auch nur einen Ansatz einer Lösung bzw. überhaupt des Problems zu finden.

    Erstmal die Daten:
    Delphi 2007
    MS SQL Server
    Windows 2000

    Es wird immer wieder die gleiche ADOQuery (aus einer Unit in einer anderen) mit dem sql String aufgerufen:

    procedure xy (sql_str)
    begin
    AQ_select.close;
    AQ_select.sql.clear;
    AQ_select.sql.add('select * from table where PK = 23843');
    AQ_select.open;
    end;

    Das funktioniert 1874 mal ohne Probleme, aber beim 1875. mal kommt ne Zugriffsverletztung in der Zeile AQ_select.close.
    hab die Stelle mit try except abgefangen.

    Gibt es irgendeine Beschränkung wie oft man eine AQ aufmachen kann? Kann ich mir zwar nicht vorstellen...
    Verwende dieses Konstrukt zig mal in meinem Projekt, ohne Probleme.

    Hat irgendjemand eine Idee woran das liegen könnte und wie man das löst?

    Vielen Dank schon mal!

    greets liese

  • #2
    Welche Fehlermeldung kommt den genau?

    Comment


    • #3
      sorry, hab ich total vergessen.

      sind mehrere aber als erstes immer:

      Fehler bei datensatz_nr: 16 Zugriffsverletzung bei Adresse 00401EAD in Modul 'XY.exe'. Schreiben von Adresse 00000014

      wenn man dann fortsetzen statt anhalten klickt kommt noch das:

      Fehler bei datensatz_nr: 18 AQ_select: Das Feld '' wurde nicht gefunden
      usw. für jeden folgenden Datensatz.

      Comment


      • #4
        Würde folgende Punkte noch überprüfen:
        • Hat die ADOQuery eine Verbindung zur ADOConnection?
        • Ist die ADOConnection aktiv (verbunden zur Datenbank)?
        • Wofür benötigst du sql_str?
        • Hat sql_str einen Wert?


        Würde es an meiner Stelle so machen:
        Code:
        procedure xy (sql_str)
        begin
          try
            if AQ_select.Active then
              AQ_select.close;
            AQ_select.sql.clear;
            AQ_select.sql.add('select * from table where PK = 23843');
            AQ_select.open;
          except
            on e:exception do
              ShowMessage('Fehler in Proc_XY - SQL-Code: ' + sql_str + ' - Fehlermeldung: ' + e.Message);
          end;
        end;

        Comment


        • #5
          Hallo tampara,

          vielen danke für die Antwort.

          zu deinen Fragen:
          ja
          ja
          die Procedure wird mit dem sql string = sql_str aus einer anderen Unit aus aufgerufen, das was dann im add eingefügt wird. habs aber auch schon mit select direkt im add probiert und ohne Procedure ADO direkt an der Stelle der anderen Unit wo benötigt. Brachte alles nix.
          ja

          das if hab ich auch schon drin und try except mit Ausgabe e.message und sql_str sowieso.

          im Moment läuft es auch wieder ohne Probleme, mal sehn wie lange...

          Comment


          • #6
            Tach,

            wenn ich solche merkwürdigen Fehler habe, liegt es zu 99 % immer an den datensensitiven Steuerelementen (auch bei .close !)

            Um dahinterzukommen:
            - die Verknüpfung zu verbundenen Datasource - Objekten einmal entfernen, wenn es dann geht, wieder einhängen und bei den Controls entfernen, stück für Stück wieder zuordnen bis der Fehler wieder auftritt
            - eventuelle berechnete und Lookupfelder Felder aus der Feldliste entfernen und dann nochmal testen

            Viel Erfolg
            Tino
            Ich habs gleich!
            ... sagte der Programmierer.

            Comment

            Working...
            X