Entwickler-Ecke

Sonstiges (Delphi) - Ich kapier es nicht mit dem Highscore HELP!!!


BlackPhantom - Mo 03.03.03 22:21
Titel: Ich kapier es nicht mit dem Highscore HELP!!!
Hi,

Folgende Situation:
Ich habe mir den Post von Cash zum Thema Highscore und die Antworten durchgelesen und den Link benutzt. Ich habe das Tutorial duchgearbeitet.

Doch....als ich fertig war und auf Speichern geklickt habe kam ein Fehler auf. Der tritt immer wieder auf wenn ich auf Speichern Klicke.....hat denn zum Geier keiner mal ne funktionierende Highscore-Form oder ne kleine Demo dazU? :cry:

Ich danke jedem für jegliche Hilfe

MFG
BlackPh


Delete - Mo 03.03.03 22:24

Schon mal auf die Idee gekommen deinen Versuch hier zu posten (mit fehlermeldungen bitte)?


BlackPhantom - Mo 03.03.03 22:30

Hier der Fehler:

E/A-Fehler 87.

Das sagt er mir wenn ich auf Speichern klicke.

Und hier mein Quellcode


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button7: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Positionieren(datensatz: integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type Adresse = record
       name: string[50];
       strasse: string[100];
       plz: integer;
       ort: string[50];
     end;

var
  Form1: TForm1;
  var datei: file of Adresse;

const
  BufferSize = 32;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
     AssignFile(datei,'adressen.tft');
     if FileExists('adressen.tft') then ReSet(datei)
     else ReWrite(datei);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     CloseFile(datei);
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
  if (datensatz<0) or (datensatz>=FileSize(datei)) then exit
  else begin
    seek(datei, datensatz);
    read(datei, aktdatensatz);
    edit1.text:=aktdatensatz.name;
    edit2.text:=aktdatensatz.strasse;
    edit3.text:=IntToStr(aktdatensatz.plz);
    edit4.text:=aktdatensatz.ort;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
     positionieren(FileSize(datei)-1);
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  Buffer: array[0..BufferSize - 1] of Adresse; 
  i, p: Integer;
  StartRecord, EndRecord: Integer;
  Max: Integer;
begin

  Seek(Datei, FilePos(Datei)-1);

  StartRecord := FilePos(Datei) + 1;
  EndRecord := FileSize(Datei);

  while StartRecord < EndRecord do begin


    Max := BufferSize;
    if Max > EndRecord - StartRecord then
      Max := EndRecord - StartRecord;
    Seek(Datei, StartRecord);
    for i := 0 to Max - 1 do
      Read(Datei, Buffer[i]);


    Seek(Datei, StartRecord - 1);
    for i := 0 to Max - 1 do
      Write(Datei, Buffer[i]);
    inc(StartRecord);      
  end;


  Truncate(Datei);
  Positionieren(StartRecord-1);

end;

procedure TForm1.Button5Click(Sender: TObject);
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  while not eof(datei) do begin
    Read(datei, Buffer[p]);
    inc(p);
  end;
  CloseFile(datei);
  Buffer[p+1].name:='';
  Buffer[p+1].strasse:='';
  Buffer[p+1].plz:=0;
  Buffer[p+1].ort:='';
  ReWrite(datei);
  for i:=0 to p do write(datei, Buffer[i]);

  positionieren(FileSize(datei)-1);

end;

procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
    nr: integer;
begin

  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.name:=Edit1.Text;
  datensatz.strasse:=Edit2.Text;

  datensatz.plz:=StrToIntDef(Edit3.Text, -1);

  datensatz.ort:=Edit4.Text;
  write(datei,datensatz);
  positionieren(nr);

end;

end.

Kann jemand da den Fehler finden oder gar eine funktionierende Highscore zuschicken....meine E-Mail lautet:

Moderiert von user profile iconTino: E-Mailadresse entfernt. Antworten bitte hier ins Forum.


Aya - Mo 03.03.03 23:19

Hi,

der fehler hat zu 99%iger ischerheit nix mit deinem Prog zu tun...

1.) Festplatte voll???
2.) Ist die Datei evtl. Schreibgeschützt??

Wenn beides nich is, kopier den gesammten Quelltext -> Neues Projekt und einfügen ;)

Au'revoir,
Aya


BlackPhantom - Mo 03.03.03 23:34

Festplatte ist erst halbvoll....schreibgeschützt ist die Datei auch nicht...und ich habs mit nem neuen Project versucht genau der gleiche Fehler :roll:


Anonymous - Di 04.03.03 00:15

Hier paar Punkte die mir aufgefallen sind. Ob sie allerdings der Fehler sind weiß ich nicht.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type 
  TForm1 = class(TForm) 
    ...
    procedure FormDestroy(Sender: TObject); 
    procedure Positionieren(datensatz: integer); // <<<
    procedure Button1Click(Sender: TObject); 
    ...
  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end;


Was von dir ist sollte in Private oder Public:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type 
  TForm1 = class(TForm) 
    ...
    procedure FormDestroy(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    ...
  private 
    { Private-Deklarationen } 
    procedure Positionieren(datensatz: integer); // <<<
  public 
    { Public-Deklarationen } 
  end;


Du solltes auch Pfade angeben. Guck dir dazu auch die Seite an: http://www.delphi-forum.de/viewtopic.php?t=7546


Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
begin
     AssignFile(datei,'adressen.tft');
     if FileExists('adressen.tft') then ReSet(datei)
     else ReWrite(datei);

end;


z.B.


Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
begin
     AssignFile(datei,'c:\adressen.tft');
     if FileExists('c:\adressen.tft') then ReSet(datei)
     else ReWrite(datei);

end;


Ansonsten solltest du noch sagen bei welchen Button die Fehlermeldung kommt,


Aya - Di 04.03.03 00:22

aaachsooo... haalt... *g*

Meinst du mit "als ich auf Speichern geklickt habe"... als du das DelphiProjekt speichern wolltest (hab ich angenommen), oder als du IN deinem Programm auf Speichern geklickt hast???

Au'revoir,
Aya


Anonymous - Di 04.03.03 00:26

Kann es sein, daß du nur einen einzigen Record speichern willst? Wenn ja, dann würde ich dir raten das in einer Ini zu speichern. Ist viel leichter.


BlackPhantom - Di 04.03.03 00:28

Danke für den Link....ich hab doch gesagt wo und wann der Fehler auftritt und zwar wenn ich auf Speichern klicke das ist Button7. Und daran kann es nicht liegen, dass einiges nicht unter public steht ich probier es mal trotzdem aus :I


Anonymous - Di 04.03.03 00:31

BlackPhantom hat folgendes geschrieben:
Danke für den Link....ich hab doch gesagt wo und wann der Fehler auftritt und zwar wenn ich auf Speichern klicke das ist Button7. Und daran kann es nicht liegen, dass einiges nicht unter public steht ich probier es mal trotzdem aus :I


Woher soll einer wissen, daß Button7 bei dir der Speichern Button ist.


BlackPhantom - Di 04.03.03 15:35

Danke für die Aufmerksamkeit Popov..........
Meine Frage: wieso sollte es denn einfacher sein in einer InI abzuspeichern, als in einer anderen Form? Dürfte doch im Grunde keinen Unterschied machen.

Und wie kann man denn mehrere Records abspeichern?