so, hier der Quelltext, vielleicht git das ne bessere
Verständlichkeit über das was ich machen wollte.
mal als erstes: gib Deinen Komponenten sprechende Namen! Mit BitBtn3 kann niemand was anfangen. Besser wäre btnEnde o.ä.
Genauso ist es besser als Variable „Anzahl“ zu nehmen statt „a“. Soviel Zeit muss sein. Das macht den Code lesbarer (vor allem für andere) und die Codevervollständigung von Delphi nimmt Dir die Schreibarbeit ab.
Übrigens: Gemäß Delphi-Styleguide sollten die Bezeichner keine Unterstriche enthalten.
_unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit_Name: TEdit;
Edit_Autor: TEdit;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
Label5: TLabel;
Edit_Buchanzahl: TEdit;
Button1: TButton;
Button2: TButton;
Label6: TLabel;
Edit_Anzahl_eingeben: TEdit;
Edit_Stichwort: TEdit;
Label4: TLabel;
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type TBuecher = record
Nummer: integer;
Name, Autor, Stichwort: String[35];
Verfuegbar: integer;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
close
end;_
Bis auf den Prozedurnamen OK.
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
with StringGrid1 do
kann es sein, dass da ein „begin“ fehlt und natürlich das dazugehörige „end“? Das macht im Moment nur deshalb nichts aus, weil Du im nachfolgenden immer StringGrid1 wiederholst (was das „with“ eigentlich überflüssig macht).
StringGrid1.Cells[0,0]:=‚Nummer‘;
StringGrid1.Cells[1,0]:=‚Buchname‘;
StringGrid1.Cells[2,0]:=‚Autor‘;
StringGrid1.Cells[3,0]:=‚Verfügbar‘;
StringGrid1.Cells[4,0]:=‚Kategorie‘;
begin
Das „begin“ ist verrutscht!
for i:=1 to 100 do
StringGrid1.Cells[0,i]:=IntToStr(i);
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //soll
runterrechnen, funktioniert auch
var a,e: integer;
begin
a:=strtoint(Edit_Buchanzahl.Text);
e:=a-1;
Edit_Buchanzahl.Text:=inttostr(e);
end;
bisschen kompliziert, aber OK.
procedure TForm1.Button2Click(Sender: TObject);
var a,e: integer; //Soll Hochrechnen, funktioniert
begin
a:=strtoint(Edit_Buchanzahl.Text);
e:=a+1;
Edit_Buchanzahl.Text:=inttostr(e);
end;
s.o.
procedure TForm1.BitBtn4Click(Sender: TObject); //Soll
Bearbeiten, testen nicht möglich, da Datei nicht öffnet
var Buch : TBuecher;
Datei : File of TBuecher ;
i : Integer ;
a : Integer ;
begin
a:=StrToInt(Edit_Anzahl_eingeben.Text);
AssignFile(Datei,‚Buchliste.dat‘);
Gib hier mal den gesamten Pfad ein!
Reset(Datei);
Wenn Du nur schreiben willst verwende besser Rewrite.
for i:=a to a do
begin
StringGrid1.Cells[1,i]:=Edit_Name.Text;
StringGrid1.Cells[2,i]:=Edit_Autor.Text;
StringGrid1.Cells[3,i]:=Edit_Buchanzahl.Text;
StringGrid1.Cells[4,i]:=Edit_Stichwort.Text;
ist es Absicht, dass Du das Stringrid und die Datei komplett mit demselben Buch füllst?
with Buch do
begin
Nummer:=i;
Name:=(StringGrid1.Cells[1,i]);
Autor:=(StringGrid1.Cells[2,i]);
Verfuegbar:=StrToInt(StringGrid1.Cells[3,i]);
Stichwort:=(StringGrid1.Cells[4,i]);
Write(Datei,Buch);
CloseFile(Datei);
findest Du nicht, dass Du die Datei etwas früh wieder schließt? Willst Du das nicht erst machen, nachdem Du alle Bücher geschrieben hast?
end;
end;
end;
procedure TForm1.BitBtn5Click(Sender: TObject); soll
öffnen, funktioniert nicht, liegt aber wahrscheinlich am
Fehlen einer Datei, sodass mein Programm nicht sauber geöffnet
wird
_var Buch : TBuecher;
Datei : File of TBuecher;
i : Integer;
begin
AssignFile (Datei,‚Buchliste.dat‘);_
Auch hier wieder: kompletten Pfad angeben!
Reset(Datei);
i:=0 ;
repeat
hier sollte eine abweisende Schleife genommen werden (while)!
Inc(i);
Read (Datei,Buch);
with Buch do
begin
Nummer:=i;
Dir ist aber klar, dass Du die Nummer schon aus der Datei eingelesen hast? Ist es Absicht, sie hier wieder zu überschreiben?
StringGrid1.Cells[1,i]:=(Name);
StringGrid1.Cells[2,i]:=(Autor);
StringGrid1.Cells[3,i]:=IntToStr(Verfuegbar);
StringGrid1.Cells[4,i]:=(Stichwort);
end;
lass mal bei 1, 2 und 4 die Klammern weg.
:until EOF(Datei);
CloseFile(Datei);
end;
procedure TForm1.BitBtn1Click(Sender: TObject); Hier
meine Suchfunktion
var Buch : TBuecher;
Datei : File of TBuecher;
i : Integer;
begin
AssignFile (Datei,‚Buchliste.dat‘);
s.o.
Reset(Datei);
i:=0;
begin
das „begin“ ist verrutscht!
while not EOF(Datei) do
Read (Datei,Buch);
Inc(i);
If Edit_Stichwort.Text=StringGrid1.Cells[4,i] then
with Buch do
begin
Nummer:=i;
StringGrid1.Cells[1,i]:=(Name);
StringGrid1.Cells[2,i]:=(Autor);
StringGrid1.Cells[3,i]:=FloatToStr(Verfuegbar);
StringGrid1.Cells[4,i]:=(Stichwort);
end;
CloseFile(Datei);
end;
Das „end“ ist verrutscht!
end;
end.
Ich glaub, ich seh den Wald vor Bäumen nicht, was kann ich
denn noch machen? Ich muss das alles Dienstag am laufen haben
und nichts läuft.
wird schon noch klappen!
Gruß, Niels