AGB  ·  Datenschutz  ·  Impressum  







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

Error EAccessViolation

Ein Thema von Z32 · begonnen am 6. Feb 2007 · letzter Beitrag vom 6. Feb 2007
Antwort Antwort
Z32
(Gast)

n/a Beiträge
 
#1

Error EAccessViolation

  Alt 6. Feb 2007, 17:16
Hallo,

Ich habe ein Problem, umd zwar weiß ich nicht warum ich am ende meimer Procedure immer den Error "EAccessViolation" bekomme.

Erstmal zu der Procedure, die stammt aus meinem Kontoverwaltungsprogramm und ist zum speichern eingegebener Daten in eine Ini Datei gedacht. Jedoch soll befor der Name eines Kontos geändert wird erst überprüft werden ob schon ein konto mit dem selben Namen vorhanden ist. Und an der Stelle haperts

Delphi-Quellcode:
{FORM1.BUTTON1.CLICK - DATEN SPEICHERN}
procedure TForm1.Button1Click(Sender: TObject);
var x: string;
begin
if not (combobox1.Text='Bitte wählen') then {abfragen ob in der Benutzer überhaupt ein konto gewählt hat}
  begin
  if not (combobox1.Text='Bargeld') then {abfragen ob nicht das bargeldkonto gewählt ist}
    begin
    x:='k';
    ini01:=TIniFile.create(ExtractFilePath(ParamStr(0))+'kvload.ini');
      try
      if combobox1.Text=edit1.Text then {abfragen ob überhaupt ein neuer name eingegeben wurde}
        begin
        ini01.EraseSection(combobox1.Text);
        ini01.WriteString(edit1.Text,'Inhaber',edit2.Text);
        ini01.WriteString(edit1.Text,'Bank',edit3.Text);
        ini01.WriteString(edit1.Text,'Bankleitzahl',edit4.Text);
        ini01.WriteString(edit1.Text,'Kontonummer',edit5.Text);
        ini01.WriteString(edit1.Text,'Kommentar',edit6.Text);
        ini01.WriteInteger(edit1.Text,'Kapital',strtoint(label19.Caption));
        end
        else {es wurde ein neuer name eingegeben}
        begin
        if ini01.SectionExists(edit1.Text) then {abfragen ob der neue name schon vorhanden ist}
          begin
          edit1.Text:=combobox1.Text;
          showmessage('Daten speichern fehlgeschlagen! Den eingegebenen Kontonamen gibt es schon');
          end
          else {er ist noch nicht vorhanden, also speichern}
          begin
          ini01.EraseSection(combobox1.Text);
          ini01.WriteString(edit1.Text,'Inhaber',edit2.Text);
          ini01.WriteString(edit1.Text,'Bank',edit3.Text);
          ini01.WriteString(edit1.Text,'Bankleitzahl',edit4.Text);
          ini01.WriteString(edit1.Text,'Kontonummer',edit5.Text);
          ini01.WriteString(edit1.Text,'Kommentar',edit6.Text);
          ini01.WriteInteger(edit1.Text,'Kapital',strtoint(label19.Caption));
          end;
        end;
      finally
      ini01.Free;
      end;
    end
    else {besonderheit beim bargeld konto, man kann den namen nicht ändern...}
    begin {...deshalb unwichtig}
    x:='b';
    ini01:=TIniFile.create(ExtractFilePath(ParamStr(0))+'kvload.ini');
      try
      ini01.EraseSection(combobox1.Text);
      ini01.WriteString(combobox1.Text,'Kommentar',edit6.Text);
      ini01.WriteInteger(combobox1.Text,'Kapital',strtoint(label19.Caption));
      finally
      ini01.Free;
      end;
    end;
  ini01:=TIniFile.create(ExtractFilePath(ParamStr(0))+'kvload.ini'); {der combobox werden alle konten zugeordnet}
    try
    ini01.ReadSections(combobox1.Items);
    finally
    ini01.Free;
    end;
  if x='kthen {combobox.text wird mit dem aktuellem kontonamen (neu, oder nicht) geladen}
  combobox1.Text:=edit1.Text;
  if x='bthen
  combobox1.Text:='Bargeld';
  showmessage('Daten erfolgreich gespeichert');
  end
  else
  begin
  showmessage('Daten speichern fehlgeschlagen');
  end;
end;
Bisher klappt das ändern der Detials und das ändern des kontonamen, wenn der neue nicht schon vorhanden ist. Aber wenn der neue name schon vorhanden ist, kommt eben dieser fehler (s.o)

Ich hoffe, dass ihr durch den Quelltext blickt und auf eure hilfe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Error EAccessViolation

  Alt 6. Feb 2007, 17:37
1. Tipp: statt nichtssagende Namen wie Edit1 oder Combo1 verwende doch sprechende Bezeichner wie z.B. EdtKonto
2. Tipp: statt 25 Mal Edit1.Text zu schreiben, verwendet doch Zwischenvariablen, die schon im Namen erklären wozu sie gut sind. (z.B. "inisection")
Die Zwischenvariablen werden einmal am Anfang der Prozedure zugewiesen und dann verwendet
3. Tipp: du brauchst das INI-Objekt nur einmal erzeugen und am Ende der Prozedure ein Mal freigeben.
"ini01" sollte unbedingt eine lokale Variable sein.
4. Tipp: du kannst deinen Spaghetticode mit Tipp 1 bis 3 schön aufräumen und dann nochmals hier vorstellen.
Andreas
  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 11:10 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