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='k' then {combobox.text wird mit dem aktuellem kontonamen (neu, oder nicht) geladen}
combobox1.Text:=edit1.Text;
if x='b' then
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