AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccess Violation im Programm

Offene Frage von "Ava-chan"
Ein Thema von Ava-chan · begonnen am 11. Feb 2007 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Ava-chan

Registriert seit: 5. Jul 2006
8 Beiträge
 
Delphi 7 Professional
 
#1

EAccess Violation im Programm

  Alt 11. Feb 2007, 14:32
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:
  If JoinPanel.Visible=true THEN
  begin
    If Variable='1THEN
   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;
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.

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
Angehängte Dateien
Dateityp: pas login_164.pas (254,6 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: EAccess Violation im Programm

  Alt 11. Feb 2007, 18:18
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:
// ...
_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) };
// ...
Grüße vom marabu
  Mit Zitat antworten Zitat
Ava-chan

Registriert seit: 5. Jul 2006
8 Beiträge
 
Delphi 7 Professional
 
#3

Re: EAccess Violation im Programm

  Alt 11. Feb 2007, 19:10
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz