Hallo Mathias und Linkat,
danke für eure schnellen Antworten.
Mathias hat geschrieben:Eine StringList speichert man am einfachsten mit
ab.
Ja, die Funktion ist mir auch bereits bekannt, jedoch sollen wir alles in ein Record speichern.
Mathias hat geschrieben:Aber irgendwie sehe ich nicht durch was du schlussendlich machen willst.
Eine kleine DVD-Datenbank ?
Oder vielleicht reicht dir ein einfacher String dafür.
Ja, es soll eine Videothek als Datenbank werden, und da sollen halt mehrere Darsteller gespeichert werden. Dazu reicht mMn ein einfacher String als Datentyp nicht aus.
Ich dachte, es reicht, wenn ich euch obigen Quelltext schicke,
also so hab ich es mir gedacht:
Ich lege ein Record fest und die dazugehörigen Variablen:
Code: Alles auswählen
TDatum = record
d, m, y: integer;
end;
TFilm = record
Name: string[40];
Genre: string[20];
Regisseur: string[40];
Darsteller: TStringList;
Zuletzt: TDatum;
Info: string[250];
end;
var
Form1: TForm1;
dat: file of TFilm;
Film: TFilm;
Nun füge ich neue Daten auf dem
dritten Formblatt hinzu:
Code: Alles auswählen
uses
Unit1;
{$R *.lfm}
{ TForm3 }
procedure TForm3.Button1Click(Sender: TObject);
begin
if (edit1.Text <> '') and (edit3.Text <> '') and (radiogroup1.ItemIndex <> -1) and
(Memo1.Text <> '') and (Str.Count > 0) then
begin
Reset(Unit1.dat);
while not (eof(dat)) do read(dat,Film);
Unit1.Film.Name := edit1.Text;
edit1.text:='';
case Radiogroup1.ItemIndex of
0: Unit1.Film.Genre := 'Action';
1: Unit1.Film.Genre := 'Thriller';
end;
Radiogroup1.itemindex:=-1;
Unit1.Film.Regisseur := edit3.Text;
Edit3.text:='';
Unit1.Film.Darsteller := str;
Edit2.text:='';
str.Clear;
Unit1.Film.Info := Memo1.Text;
Memo1.text:='';
Write(Unit1.dat,Unit1.Film);
end else ShowMessage('NÖ');
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
if edit2.Text <> '' then
Str.Add(edit2.Text);
edit2.Text := '';
end;
procedure TForm3.FormShow(Sender: TObject);
begin
str := TStringList.Create;
end;
Und möchte sie nun auf dem
vierten Formblatt ausgeben.
Code: Alles auswählen
uses
Unit1;
{$R *.lfm}
{ TForm4 }
procedure TForm4.Details(pos: integer);
var
strl:TStringlist;
begin
Reset(unit1.dat);
Seek(unit1.dat, pos - 1);
Read(dat, unit1.Film);
label2.Caption := Unit1.Film.Name;
label4.Caption := Unit1.Film.Genre;
label6.Caption := Unit1.Film.Regisseur;
{ Strl:=TStringlist.create;
Strl:=Unit1.Film.Darsteller;
ListBox1.Items.Assign(Strl); }
if (Unit1.film.Zuletzt.d = 0) and (Unit1.film.Zuletzt.m = 0) and
(Unit1.film.Zuletzt.y = 0) then
label8.Caption := 'Noch nicht angeschaut!'
else
label8.Caption := 'Zuletzt am ' + IntToStr(Unit1.Film.Zuletzt.d) + '.' +
IntToStr(Unit1.Film.Zuletzt.m) + '.' + IntToStr(Unit1.Film.Zuletzt.y) + ' angeschaut!';
Memo1.text:=Unit1.film.Info;
end;
Die Position (Pos) ist dabei bereits bekannt.
Nun gibt er mir, da wo der Kommentar ist, eine Fehlermeldung, s.o.
Linkat hat geschrieben:Deine Fehlermeldung könnte von einer nicht initialisierte Stringlist (StringList.Create) herrühren.
Aber, wenn ich die Stringlist neu erstellte, wird doch deren Inhalt überschrieben?
Also wenn ich das so schreibe, ist der Inhalt leer ( ist ja eigentlich klar ...).
Code: Alles auswählen
Unit1.Film.Darsteller:=TStringlist.create;
ListBox1.Items.Assign(Unit1.Film.Darsteller);
Naja, und jetzt weiß ich nicht mehr weiter... :c
Liebe Grüße,
Curry.
Linkat hat geschrieben:Bitte vertiefe deine Grundlagen bezüglich Records, Stringlisten, Arrays noch ein bisschen.
In welchen Bereichen denn? Wenn du irgendwas sinnloses u.a. oben im Quelltext findest, lass es mich gerne wissen - Dann werde ich hoffentlich noch was Besseres finden.