@Rippo
Du machst das etwas kompliziert mit der Ini. Du erzeugst die Ini in einer Prozedur und verschickst sie dann als Parameter an andere Prozeduren. Das ist an sich kein Fehler, man verliert aber schnell die Übersicht. Wie gesagt, man kann es so machen, aber einfacher ist es nur den Dateinamen zu verschicken und in jeder Prozedur die Ini neu öffnen. Kostet kein Geld. Die Ini wird in jeder Prozedur neu geöffnet und wieder geschlossen. Das ist etwas sauberer (finde ich).
Das habe ich aus dem Kopf gemacht, ist also nicht überprüft. Sollte aber funktionieren. Hier wird nicht die Ini als Parameter übergeben, sondern nur der Dateiname.
Delphi-Quellcode:
procedure IniEraseSection(const IniFileName, SectionName: String);
var
AIni: TIniFile;
begin
AIni := TIniFile.Create(IniFileName);
try
AIni.EraseSection(SectionName);
finally
AIni.Free;
end;
end;
procedure SaveToIni(const IniFileName: String; const ABenutzer: TBenutzer);
const
SectionBenutzer = 'Benutzer';
SectionZugang = 'Zugang';
var
AIni: TIniFile;
begin
AIni := TIniFile.Create(IniFileName);
try
AIni.WriteString(SectionBenutzer, ABenutzer.BenutzerName, ABenutzer.Kennwort);
AIni.WriteString(SectionZugang, ABenutzer.BenutzerName, ABenutzer.Rechte);
finally
AIni.Free;
end;
end;
procedure DeleteAllSections(const IniFileName: String);
...
begin
...
for I := 0 to AllSectionsList.Count-1 do
begin
SectionName := AllSectionsList[I];
IniEraseSection(IniFileName, SectionName);
end;
...
end;
procedure TfrmBenutzerverwaltung.btnSpeichernClick(Sender: TObject);
const
IniFileName = 'C:\Users\Verwaltung.ini';
var
Zeile, Spalte : integer;
Titel: string;
AIni: TIniFile;
Benutzer : TBenutzer;
begin
SaveToStringGrid(edtName.Text,edtPasswort.Text,edtKunde.Text,edtLieferant.Text,edtPersonal.Text,edtVerwaltung.Text);
SaveToIni(IniFileName, Benutzer);
DeleteAllSections(IniFileName);
...