Entwickler-Ecke

Datenbanken - Datenbank unter Delphi 3 erstellen


Neo1989 - Di 15.01.08 14:23
Titel: Datenbank unter Delphi 3 erstellen
Hallo,
ich fange gleich mal an: Wir sollen in der Schule mit Delphi 3 eine Mitgliederdatenbank erstellen. Klappt soweit ganz gut nur das löschen und das korrigieren von Datensätzen klappt nicht. Da wir das noch nich gemacht haben und es auch nicht in unserem Schulbuch steht weiss ich nicht wie ich das anstellen soll. Wäre nett wenn mir da jemand mal einen Quelltext für das Löschen und einen für das Korrigieren posten könnte. Ich wollte eigtl meinen bisherigen Quelltext posten nur besitze ich zuhause kein Delphi 3, falls jmd. weiss wo man das herbekommt wäre das nett wenn er mir das sagen könnte.

danke schonmal im vorraus

MfG.
Neo


Chryzler - Di 15.01.08 15:33

Na zum Posten des Quellcodes brauchst du ja auch kein Delphi, solange du die Quellcodedateien hast. Lad sie einfach als Anhang hoch.


Klabautermann - Di 15.01.08 18:36

Hi,

es währe wichtig zu wissen, wie Ihr die Daten speichert. Als Textdatei, Typisierte Datei mit hilfe eines DMS? Das einfachste währe es sicherlich, wenn du deine Quelltexte oder wenigsten einen relevanten ausszug aus diesen Postest.

*.pas Dateien sind ncihts anderes als Textdateien die du in jedem Editor öffnen kannst.

// edit: Zu Delphi 3 gab es keine kostenlose Version somit kann dir auch keiner helfen die zu bekommen. Du kannst hier [http://www.delphi-forum.de/download_delphi_2005_personal.html] eine wesentlich neuere 2005er Version herunter laden.

Gruß
Klabautermann


Neo1989 - Di 15.01.08 18:37

Ok hier der Quelltext. Ich denke mal ist ziemlich umständlich geschrieben :-) hab ihn so geschrieben wie es mir grad eingeafllen ist. Also alles außer Löschen funktioniert.


Delphi-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:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
nit UHaupt;

interface

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

type
  TFKegel = class(TForm)
    EditName: TEdit;
    EditVNAme: TEdit;
    EditGd: TEdit;
    Edit1Wk: TEdit;
    Edit2Wk: TEdit;
    Edit3Wk: TEdit;
    MainMenu1: TMainMenu;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    SGAusgabe: TStringGrid;
    Label9: TLabel;
    EditSuche: TEdit;
    Datei1: TMenuItem;
    Anlegen1: TMenuItem;
    Neuanlegen1: TMenuItem;
    Ausgabe1: TMenuItem;
    sortiertnach1: TMenuItem;
    Name1: TMenuItem;
    Vorname1: TMenuItem;
    Geburtsdatum1: TMenuItem;
    Gesamtpunktzahl1: TMenuItem;
    Datenstze1: TMenuItem;
    Suchenach1: TMenuItem;
    Name2: TMenuItem;
    Vorname2: TMenuItem;
    Lschen1: TMenuItem;
    Korrigieren1: TMenuItem;
    BBest: TButton;
    unsortiert1: TMenuItem;
    Hilfe1: TMenuItem;
    WiebenutzeichdiesesProgramm1: TMenuItem;
    EditDk: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Anlegen1Click(Sender: TObject);
    procedure Neuanlegen1Click(Sender: TObject);
    procedure BBestClick(Sender: TObject);
    procedure unsortiert1Click(Sender: TObject);
    procedure Name1Click(Sender: TObject);
    procedure Vorname1Click(Sender: TObject);
    procedure Name2Click(Sender: TObject);
    procedure Vorname2Click(Sender: TObject);
    procedure Korrigieren1Click(Sender: TObject);
    procedure Lschen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FKegel: TFKegel;

implementation

{$R *.DFM}
TYPE
   Tdatensatz = RECORD
                 nname:string[20];
                 Vname:string[20];
                 Gd:string[10];
                 einsWk:integer;
                 zweiWk:integer;
                 dreiWk:integer;
                 GPkte:integer;
                end;
 var
  datei:FILE of TDatensatz;
  satz:Array[1..100of Tdatensatz;
  Hilf:Tdatensatz;
  i,j,x,anz:integer;
  Snname:string;
  SVname:string;
  SGd:string;
  GPkte:Integer;

procedure TFKegel.FormCreate(Sender: TObject);
begin
 i:=1;
 SGAusgabe.cells[0,0]:='Nr.';
 SGAusgabe.cells[1,0]:='Name';
 SGAusgabe.cells[2,0]:='Vorname';
 SGAusgabe.cells[3,0]:='Geburtsdatum';
 SGAusgabe.cells[4,0]:='1. Wk';
 SGAusgabe.cells[5,0]:='2. Wk';
 SGAusgabe.cells[6,0]:='3. Wk';
end;

procedure TFKegel.Anlegen1Click(Sender: TObject);
begin
 AssignFile(datei,'Mitglieder.dat');
 Rewrite(datei);
 CloseFile(datei);
end;

procedure TFKegel.Neuanlegen1Click(Sender: TObject);
begin
 Fkegel.close;
end;

procedure TFKegel.BBestClick(Sender: TObject);
begin
 AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 Seek(datei,Filesize(datei));
 satz[i].nname:=editName.text;
 satz[i].vname:=editVname.text;
 satz[i].Gd:=editGd.text;
 satz[i].einsWk:=strtoint(edit1wk.text);
 satz[i].zweiWk:=strtoint(edit2wk.text);
 satz[i].dreiWk:=strtoint(edit3wk.text);
 Write(datei,satz[i]);

 EditVname.clear;
 EditName.clear;
 Editgd.clear;
 Edit1WK.clear;
 Edit2WK.clear;
 Edit3WK.clear;
 Editname.setfocus;

 CloseFile(datei);
end;

procedure TFKegel.unsortiert1Click(Sender: TObject);
begin
 AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 i:=1;
 While Not EOF(datei) Do
 begin
  Read(Datei,satz[i]);
  sgausgabe.cells[1,i]:=satz[i].nname;
  sgausgabe.cells[2,i]:=satz[i].vname;
  sgausgabe.cells[3,i]:=satz[i].gd;
  sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
  sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
  sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
  sgausgabe.cells[0,i]:=FormatFloat('0.',i);
  I:=i+1;
 end;
 sgausgabe.rowcount:=Filesize(datei)+1;
 CloseFile(datei);
end;

procedure TFKegel.Name1Click(Sender: TObject);
begin
  AssignFile(Datei,'Mitglieder.dat');
  Reset(Datei);
  For i:=1 To FileSize(datei) do
   Read(Datei,Satz[i]);

 For J:=FileSize(datei)-1 downto 1 Do
    For i:=1 To j Do
       If Satz[i].nname>Satz[i+1].nname Then
         begin
          Hilf:=satz[i];
          satz[i]:=satz[i+1];
          satz[i+1]:=Hilf;
         end;

  anz:=Filesize(Datei);
  Rewrite(Datei);

  For i:=1 to anz do
    write(Datei,satz[i]);

    CloseFile(datei);
    Reset(datei);
  i:=1;
  While Not EOF(datei) Do
 begin
  Read(Datei,satz[i]);
  sgausgabe.cells[1,i]:=satz[i].nname;
  sgausgabe.cells[2,i]:=satz[i].vname;
  sgausgabe.cells[3,i]:=satz[i].gd;
  sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
  sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
  sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
  sgausgabe.cells[0,i]:=FormatFloat('0.',i);
  I:=i+1;
 end;
   
 CloseFile(Datei);
end;

procedure TFKegel.Vorname1Click(Sender: TObject);
begin
AssignFile(Datei,'Mitglieder.dat');
  Reset(Datei);
  For i:=1 To FileSize(datei) do
   Read(Datei,Satz[i]);

 For J:=FileSize(datei)-1 downto 1 Do
    For i:=1 To j Do
       If Satz[i].vname>Satz[i+1].vname Then
         begin
          Hilf:=satz[i];
          satz[i]:=satz[i+1];
          satz[i+1]:=Hilf;
         end;

  anz:=Filesize(Datei);
  Rewrite(Datei);

  For i:=1 to anz do
    write(Datei,satz[i]);

    CloseFile(datei);
    Reset(datei);
  i:=1;
  While Not EOF(datei) Do
 begin
  Read(Datei,satz[i]);
  sgausgabe.cells[1,i]:=satz[i].nname;
  sgausgabe.cells[2,i]:=satz[i].vname;
  sgausgabe.cells[3,i]:=satz[i].gd;
  sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
  sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
  sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
  sgausgabe.cells[0,i]:=FormatFloat('0.',i);
  I:=i+1;
 end;

 CloseFile(Datei);
end;



procedure TFKegel.Name2Click(Sender: TObject);
begin
 For i:=1 To i Do
 begin
  Sgausgabe.cells[0,i]:='';
  Sgausgabe.cells[1,i]:='';
  Sgausgabe.cells[2,i]:='';
  Sgausgabe.cells[3,i]:='';
  Sgausgabe.cells[4,i]:='';
  Sgausgabe.cells[5,i]:='';
  Sgausgabe.cells[6,i]:='';
 end;
 snname:=editsuche.text;
 AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 i:=1;
 While not EOF(datei) Do
  begin
   Read(Datei,satz[i]);
   If snname=satz[i].nname Then
    begin
     sgausgabe.cells[1,i]:=satz[i].nname;
     sgausgabe.cells[2,i]:=satz[i].vname;
     sgausgabe.cells[3,i]:=satz[i].gd;
     sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
     sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
     sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
     sgausgabe.cells[0,i]:=FormatFloat('0.',i);
     i:=i+1;
    end;
   end;
   CloseFile(datei);

end;

procedure TFKegel.Vorname2Click(Sender: TObject);
begin
 For i:=1 To i Do
 begin
  Sgausgabe.cells[0,i]:='';
  Sgausgabe.cells[1,i]:='';
  Sgausgabe.cells[2,i]:='';
  Sgausgabe.cells[3,i]:='';
  Sgausgabe.cells[4,i]:='';
  Sgausgabe.cells[5,i]:='';
  Sgausgabe.cells[6,i]:='';
 end;
 svname:=editsuche.text;
 AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 i:=1;
 While not EOF(datei) Do
  begin
   Read(Datei,satz[i]);
   If svname=satz[i].vname Then
    begin
     sgausgabe.cells[1,i]:=satz[i].nname;
     sgausgabe.cells[2,i]:=satz[i].vname;
     sgausgabe.cells[3,i]:=satz[i].gd;
     sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
     sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
     sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
     sgausgabe.cells[0,i]:=FormatFloat('0.',i);
     i:=i+1;
    end;
   end;
   CloseFile(datei);

end;

procedure TFKegel.Korrigieren1Click(Sender: TObject);
begin

  x:=strtoint(editdk.text);
  AssignFile(Datei,'Mitglieder.dat');
  Reset(Datei);
  Seek(datei,(x-1));
 
  satz[x-1].nname:=editName.text;
  satz[x-1].vname:=editVname.text;
  satz[x-1].Gd:=editGd.text;
  satz[x-1].einsWk:=strtoint(edit1wk.text);
  satz[x-1].zweiWk:=strtoint(edit2wk.text);
  satz[x-1].dreiWk:=strtoint(edit3wk.text);
  Write(datei,satz[x-1]);
  closeFile(datei);

  AssignFile(Datei,'Mitglieder.dat');
  Reset(Datei);
  Seek(datei,(x-1));

 While Not EOF(datei) Do
 begin
  Read(Datei,satz[x-1]);
  sgausgabe.cells[1,x]:=satz[x-1].nname;
  sgausgabe.cells[2,x]:=satz[x-1].vname;
  sgausgabe.cells[3,x]:=satz[x-1].gd;
  sgausgabe.cells[4,x]:=FormatFloat('0.',satz[x-1].einswk);
  sgausgabe.cells[5,x]:=FormatFloat('0.',satz[x-1].zweiwk);
  sgausgabe.cells[6,x]:=FormatFloat('0.',satz[x-1].dreiwk);
  sgausgabe.cells[0,x]:=FormatFloat('0.',i);
 end;
  CloseFile(datei);

  AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 i:=1;
 While Not EOF(datei) Do
 begin
  Read(Datei,satz[i]);
  sgausgabe.cells[1,i]:=satz[i].nname;
  sgausgabe.cells[2,i]:=satz[i].vname;
  sgausgabe.cells[3,i]:=satz[i].gd;
  sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
  sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
  sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
  sgausgabe.cells[0,i]:=FormatFloat('0.',i);
  I:=i+1;
 end;
 sgausgabe.rowcount:=Filesize(datei)+1;
 CloseFile(datei);




end;

procedure TFKegel.Lschen1Click(Sender: TObject);
var
   tempdatei: File OF Tdatensatz;

begin


  x:=strtoint(editdk.text);
  AssignFile(Datei,'Mitglieder.dat');
  Reset(Datei);

  Assignfile(tempdatei,'temp.dat');
  Rewrite(tempdatei);
  Read(datei,satz[x-1]);
  while not EOF (datei) do
   begin
    read(datei,satz[i]);
    if x<>i then
      begin
      i:=filepos(tempdatei);
      write(tempdatei,satz[i]);
      end;
     end;
  closefile(datei);
  closefile(tempdatei);
  erase(datei);
  rename(tempdatei,'Mitglieder.dat');
  end;

 {AssignFile(datei,'Mitglieder.dat');
 Reset(datei);
 i:=1;
 While Not EOF(datei) Do
 begin
  Read(Datei,satz[i]);
  sgausgabe.cells[1,i]:=satz[i].nname;
  sgausgabe.cells[2,i]:=satz[i].vname;
  sgausgabe.cells[3,i]:=satz[i].gd;
  sgausgabe.cells[4,i]:=FormatFloat('0.',satz[i].einswk);
  sgausgabe.cells[5,i]:=FormatFloat('0.',satz[i].zweiwk);
  sgausgabe.cells[6,i]:=FormatFloat('0.',satz[i].dreiwk);
  sgausgabe.cells[0,i]:=FormatFloat('0.',i);
  I:=i+1;
 end;
 sgausgabe.rowcount:=Filesize(datei)+1;
 CloseFile(datei); }


end.


Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.


Klabautermann - Di 15.01.08 18:51

Hallo,

bist du sicher, das das war du hast so funtkioniert?

habe es jetzt nicht völlig Analysiert aber welchen Wert hat z.B. in der Folgenden Funktion i?


Delphi-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:
procedure TFKegel.BBestClick(Sender: TObject); 
begin 
 AssignFile(datei,'Mitglieder.dat'); 
 Reset(datei); 
 Seek(datei,Filesize(datei)); 
 satz[i].nname:=editName.text; 
 satz[i].vname:=editVname.text; 
 satz[i].Gd:=editGd.text; 
 satz[i].einsWk:=strtoint(edit1wk.text); 
 satz[i].zweiWk:=strtoint(edit2wk.text); 
 satz[i].dreiWk:=strtoint(edit3wk.text); 
 Write(datei,satz[i]); 


 EditVname.clear; 
 EditName.clear; 
 Editgd.clear; 
 Edit1WK.clear; 
 Edit2WK.clear; 
 Edit3WK.clear; 
 Editname.setfocus; 


 CloseFile(datei); 
end;


Generel hällst du deine Daten ja in einem Array im Speicher. Wenn du nun einen Datensatz löschen willst musst du ja nur alle Datensätze die hinter den zu löschenden Datensatz sind nach vorne rutschen lassen.

Wenn du also aus einem Array mit 7 Elementen das fünte löchen möchtest dann musst du Sinngemäß etwa dieses machen:


Delphi-Quelltext
1:
2:
3:
4:
satz[5] := satz[6];
satz[6] := satz[7];
satz[7].nname := '';
{...}


Vielleicht fällt dir ja was ein, wie du das umsetzen kannst.

Gruß
Klabautermann


Neo1989 - Di 15.01.08 19:57

Also mit dem Array ist nicht ganz richtig. Es sind zwar Daten vom typ Array aber diese sind halt zu einem Datensatz zusammengefügt (wie in der Deklaration "TDatensatz"). Also der name[i], der vorname[i] usw... Einen Tip haben wir ja bekommen. Und zwar sollte halt die nummer des datensatzes eingegeben werden über ein textfeld und dann einfach gesagt alle datensätze die ungleich dieser nummer sind in eine neue datei eingefügt werden welche anschließend in die ursprüngliche datei umgenannt wird.


Neo1989 - Mi 16.01.08 11:32

Wäre nett wenn mal jemand einfach den quelltext in sein Delphi kopiert damit er weiss welches Kommando für was ist und dann mal versuchen könnte das löschen eines Datensatzes hinzubekommen.