![]() |
EAccess Violation im Programm
Liste der Anhänge anzeigen (Anzahl: 1)
Access Violation at Address 00496757 in module 'Logon.exe'. Read of Address 0000001C.
Ich habe ein Programm geschrieben welches ein Kartenspiel simuliert und habe nun nach knapp nem Jahr mich mal wieder dran gesetzt nen bissi dran weiter zu schreiben da es nicht mal halb fertig ist ^.^ Na ja ... und es Gibt da einen EAccess Violation Fehler beim Datenbankzugriff. Das Programm selbst soll an der Stelle wo der Fehler auftritt eigentlich nur dasselbe tun was er schon x-mal vorher getan hat und zwar auf die Datenbank zugreifen und einen Teil davon geteilt in einzelne Variablen schreiben welche ich dann später weiter verwenden möchte.
Delphi-Quellcode:
Das währe der Auszug ... den Fehler bekomme ich immer bei der zuweisung SPS := strtoint(_myRow[7]); Ich habe schon gedacht das es da irgendwelche Datentyp probleme gibt und den kompletten block deaktiviert, aber das bringt auch nichts. Ich bin mir inzwischen nicht mal mehr sicher ob es an diesem block liegt o.O Hoffe aber einfach das mir trotzdem jemand helfen kann. -.- Wie gesagt der Fehler kann auch wo anders liegen aber die zeile mit SPS ist die, in welcher er mich in die Delphi umgebung zurückschmeißt und mir den Fehler ausgibt.
If JoinPanel.Visible=true THEN
begin If Variable='1' THEN begin befehl:='Select * FROM hackserv.GAMEIDA'+(Joiner)+''; query:= PChar(befehl); mysql_real_query(_myCon, query, length(query)); _myRes := mysql_store_result(_myCon); //alle Datensätze vom Server anfordern if _myRes = nil then begin ShowMessage('Timer 5 :Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon)); Exit; _myRes := mysql_store_result(_myCon); //alle Datensätze vom Server anfordern end; end; // SGErgebnisse einstellen _myRow := mysql_fetch_row(_myRes); // aktueller Datensatz der aktuellen Zeile // FEHLER IN SPS := STR to int Access Violation ?? SPS:=strtoint(_myRow[7]); //Augabe in der Tabelle Label332.Caption:=_myRow[1]; //Augabe in der Tabelle Label333.Caption:=_myRow[2]; //Augabe in der Tabelle Label334.Caption:=_myRow[3]; //Augabe in der Tabelle Label335.Caption:=_myRow[4]; //Augabe in der Tabelle Label336.Caption:=_myRow[5]; //Augabe in der Tabelle Label337.Caption:=_myRow[6]; //Augabe in der Tabelle Label338.Caption:=''; Label339.Caption:=''; Label340.Caption:=''; If strtoint(Label335.Caption)>strtoint(Label332.Caption) THEN Label338.Caption := '*'; If strtoint(Label336.Caption)>strtoint(Label333.Caption) THEN Label339.Caption := '*'; If strtoint(Label337.Caption)>strtoint(Label334.Caption) THEN Label340.Caption := '*'; GroupBox3.visible:=true; befehl:='delete from hackserv.GAMEIDT'+(Joiner)+' WHERE Comunicator=5'; SQL_Insert(befehl); befehl:='delete from hackserv.GAMEIDT'+(Joiner)+' WHERE Comunicator=3'; SQL_Insert(befehl); If JoinPanel.visible=true then befehl:='insert into hackserv.GAMEIDT'+(JoinEingabe.text)+' (Comunicator,Dran) values (3,2)'; If WaitforPlayer.visible=true then befehl:='insert into hackserv.GAMEIDT'+(ID)+' (Comunicator,Dran) values (3,1)'; SQL_Insert(befehl); end; Ich habe die komplette Datei einfach einmal angehängt. Währe echt super wenn mir wer helfen könnte. Da der Fehler mich langsam zum verzweifeln bringt ^.^ Aber na ja. Mata ne Ava-chan |
Re: EAccess Violation im Programm
Hallo,
du musst dich gegen falsche Zeilen- und Feldzugriffe absichern. mysql_fetch_row() liefert nil, wenn keine Zeile (mehr) im ResultSet ist und auch der ungeprüfte Zugriff auf das achte Feld (Index ist null-basiert) könnte nicht existieren:
Delphi-Quellcode:
Grüße vom marabu
// ...
_myRow := mysql_fetch_row(_myRes); if Assigned(_myrow) then if Length(_myRow) > 7 then begin SPS := StrToIntDef(_myRow[7], 0); Label332.Caption := _myRow[1]; Label333.Caption := _myRow[2]; Label334.Caption := _myRow[3]; Label335.Caption := _myRow[4]; Label336.Caption := _myRow[5]; Label337.Caption := _myRow[6]; end else { zuwenig Felder } else { kein Datensatz (mehr) }; // ... |
Re: EAccess Violation im Programm
Super !! Danke : D Funktioniert perfekt. : ) Auch wenn er die length nicht auslesen konnte. Ich habe das nun einfach weggelassen und ihm gesagt das er bei nem Satzfehler nichts machen soll und nun gehts : D
Danke noch mal ^.^ MfG Ava-chan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz