Access Violation durch den Aufruf von SQLQuery->Open()
-
Hallo,
entsprechend dem Beitrag in den FAQ versuche ich mithilfe von TSQLQuery eine SELECT-Anweisung durchzuführen. Ich möchte nur drei Werte (pro Zeile) aus der Tabelle auslesen, wie folgender Code-Ausschnitt verdeutlichen sollte:for( int i=0; i<this->fileCount; i++ ) { /*** AKTUELLEN EINTRAG LESEN ***/ Form1->SQLQuery1->Close(); Form1->SQLQuery1->SQL->Clear(); mySqlQuery = "SELECT * FROM " + Tablename + " WHERE ID=" + IntToStr( i+1 ); Form1->SQLQuery1->SQL->Add( mySqlQuery ); /*** Access violation ***/ Form1->SQLQuery1->Open(); Form1->SQLQuery1->First(); while (!Form1->SQLQuery1->Eof) { lastFileSize = Form1->SQLQuery1->Fields->Fields[ 2 ]->AsString; currentIncrease = Form1->SQLQuery1->Fields->Fields[ 3 ]->AsString; overallIncrease = Form1->SQLQuery1->Fields->Fields[ 4 ]->AsString; Form1->SQLQuery1->Next(); } ... }Der Compiler hat absolut keinen Hinweis parat, der mir auf die Sprünge helfen könnte. Beim Ausführen des Codes bricht das Programm allerdings mit der Fehlermeldung
Access violation at adress 0111B960 in module 'dbxmys30.dll'. Read of address 0000000B.an der im Code markierten Stelle ab.
An einer anderen Stelle im Code, an der ich Daten in die Tabelle (mittels "INSERT INTO" und SQLQuery->SQL->ExecSQL( )) schreibe, funktioniert alles einwandfrei.
Hat jemand Erfahrung mit diesem "mysteriösen" Fehler gemacht?
Außer der Komponente für das TSQLQuery habe ich noch ein TSQLConnection auf meinem Hauptformular.
Für jeden Rat und Hinweis bin ich sehr dankbar!

cypoc
-
Hallo
ich seh aus deinem Codeauszug keinen Grund für eine Zugriffsverletzung.
Mir fällt nur auf, das du sowohl this als auch Form1 benutzt. Heißt das das alles steht in einer Funktion die kein Member von Form1 ist?bis bald
akari
-
akari schrieb:
Heißt das das alles steht in einer Funktion die kein Member von Form1 ist?
Ja, das ist richtig.
Könnte das der Grund sein, oder sollte man Lösungen dieser Art, soweit möglich, besser vermeiden?
-
Hallo
Es könnte der Grund sein, wenn der Pointer Form1 in dieser Methode nicht auf eine gültige Instanz zeigt. Benutzt also den Debugger und überprüf genau, wann was für Werte in den Variablen stehen.
bis bald
akari
-
cypoc schrieb:
An einer anderen Stelle im Code, an der ich Daten in die Tabelle (mittels "INSERT INTO" und SQLQuery->SQL->ExecSQL( )) schreibe, funktioniert alles einwandfrei.
Der besagte Code-Ausschnitt befindet sich nur wenige Zeilen unter dem oben geposteten. Auch hier wird Form1 (usw.) benutzt.
Schließt diese Tatsache nicht automatisch den Umstand aus, dass der "Pointer Form1 in dieser Methode nicht auf eine gültige Instanz zeigt"?cypoc
-
Hallo
Ich habe meine Hinweise extra so ausgedrückt, das klar wird das ich aus deinem Auszug keinen definitiven Grund für die Speicherverletzung sehe. Sondern das ich dir Hinweise gebe, was du überprüfen solltest.
Deshlb der Hinweis mit em Debugger : du must dir nun selber helfen.bis bald
akari