Autor Beitrag
BlackPhantom
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 144

Win 2000, Win XP, UNIX
D7 Prof, C, HTML, VB 5
BeitragVerfasst: Mo 03.03.03 22:21 
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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 03.03.03 22:24 
Schon mal auf die Idee gekommen deinen Versuch hier zu posten (mit fehlermeldungen bitte)?
BlackPhantom Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 144

Win 2000, Win XP, UNIX
D7 Prof, C, HTML, VB 5
BeitragVerfasst: 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

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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

_________________
Aya
I aim for my endless dreams and I know they will come true!
BlackPhantom Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 144

Win 2000, Win XP, UNIX
D7 Prof, C, HTML, VB 5
BeitragVerfasst: 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:
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 04.03.03 00:15 
Hier paar Punkte die mir aufgefallen sind. Ob sie allerdings der Fehler sind weiß ich nicht.

ausblenden 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:

ausblenden 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: www.delphi-forum.de/viewtopic.php?t=7546

ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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

_________________
Aya
I aim for my endless dreams and I know they will come true!
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 144

Win 2000, Win XP, UNIX
D7 Prof, C, HTML, VB 5
BeitragVerfasst: 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
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 144

Win 2000, Win XP, UNIX
D7 Prof, C, HTML, VB 5
BeitragVerfasst: 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?