Lange Zeit ist's her, dass ich ein Problem hatte, nun bin ich wieder da. Und zwar mit ewas, was ich einfach nicht verstehe.
Ich wollte in einem record, welches folgendermaßen deklariert ist:
Code: Alles auswählen
TCharData = record
Categ: array of string;
Data: array of string;
Check: array of integer;
Daten speichern. Nämlich einmal die Kategorie (der Titel des Datensatzes), dann die auswählbaren Optionen (werden später als Beschriftung für RadioButtons verwendet) und eine Nummer, die den Index des gewählten Buttons angibt. So weit, so gut.
Dann habe ich folgende Prozedur zum Schreiben von Daten:
Code: Alles auswählen
procedure TForm1.DataSave;
var CharData: TCharData;
x: integer;
begin
if Button1.Caption='Speichern' then
begin
x:=ListView1.ItemIndex;
end
else if Button1.Caption='Hinzufügen' then
begin
SetLength(CharData.Categ, 1); //nur als Test eingebaut, damit überhaupt etwas in die Arrays geschrieben wird
SetLength(CharData.Data, 1);
SetLength(CharData.Check, 1);
ShowMessage('CharData.Categ länge: '+IntToStr(Length(CharData.Categ))); //Überprüfung
x:=length(CharData.Categ)-1;
end
CharData.Categ[x]:=Edit3.Text;
CharData.Data[x]:=Edit4.Text;
CharData.Check[x]:=RadioGroup1.ItemIndex;
end;
Okay. Ist ja noch recht überschaubar. Funktioniert auch noch (laut der Messages die ich bekomme). Und wundert euch nicht über die SetLength()s. Die hab ich nur eingebaut um sichergehen zu können, dass ich überhaupt Werte in das Array geschrieben hab. Eigentlich wollte ich das im FormCreate machen, aber das funkt irgendwie nie (ich habe das Gefühl, dass diese Prozedur überhaupt nicht abgearbeitet wird). Vielleicht weiß ja jemand auch da Rat.
Das ist aber nicht das Problem, sondern viel eher diese Prozedur:
Das Abrufen der Daten:
Code: Alles auswählen
procedure TForm1.DataLoad;
var CharData: TCharData;
x, i, n, z: integer;
begin
x:=-1;
n:=0;
repeat
x:=x+1;
ShowMessage(IntToStr(length(CharData.Categ))); //Nochmaliges Überprüfen, welche Infos jetzt drinnen sind -> FEHLER
ShowMessage(IntToStr(ListView1.ItemIndex));
ShowMessage(CharData.Categ[0]);
until (CharData.Categ[x]=ListView1.Items.Item[ListView1.ItemIndex].Caption)
or (x=length(CharData.Categ)-1);
if CharData.Categ[x]<>ListView1.Items.Item[ListView1.ItemIndex].Caption then
begin
ShowMessage('Eintrag nicht in Datenbibliothek vorhanden!');
end
else
begin
/////////////Ab hier Code uninteressant, da eh noch nicht prüfbar gewesen/////////////////////////////
Edit3.Text:=CharData.Categ[x];
RadioGroup1.ItemIndex:=CharData.Check[x];
for z:=0 to RadioGroup1.Items.Count-1 do
begin
RadioGroup1.Items[z]:='';
end;
for i:=1 to length(CharData.Data[x]) do
begin
if CharData.Data[x][i]=',' then
begin
n:=n+1;
end
else if (CharData.Data[x][i]=' ') and (CharData.Data[x][i-1]=',') then
begin
end
else
begin
RadioGroup1.Items[n]:=RadioGroup1.Items[n]+CharData.Data[x][i];
end;
end;
end;
end;
Denn hier hat das Array nun keinerlei Werte mehr. Es ist null Datensätze lang. Kann mir jemand erklären, warum das so ist? Was habe ich falsch gemacht. Eigentlich habe ich schon öfters mit records und arrays gearbeitet. Dachte, jetzt hätte ich mich reingearbeitet. Irgendwie werden die Daten nicht richtig eingeschrieben oder ausgelesen.
Danke für alle Hinweise und LG
ConcAPPtLab