Autor Beitrag
xflopx
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 08.03.09 16:49 
hallo!

wie kann man das machen, dass man die mitgliedsnummer selber vergibt und die dann der reihe nach geordnet werden?



ausblenden volle Höhe 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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    GroupBox3: TGroupBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit4: TEdit;
    Panel1: TPanel;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Label4: TLabel;
    Label15: TLabel;
    CheckBox: TCheckBox;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

TVerein = Record

          Vorname : string [15];
          Nachname: string [30];
          Geburtstag: string[10];
          Mitgliedsnummer: integer;
          bezahlt: string[4];

          end;

var
  Form1: TForm1;
  VereinDatei: File of TVerein;
  VereinDatensatz: TVerein;

implementation

{$R *.DFM}


procedure TForm1.FormActivate(Sender: TObject);

   begin

     AssignFile(Vereindatei,'Verein.dat');

     if fileexists('Verein.dat')
        then Reset(VereinDatei)
        else Rewrite(VereinDatei);

           Label12.Caption := inttostr (Filesize(Vereindatei));

   end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

   begin

      CloseFile(Vereindatei);

   end;

procedure TForm1.Button1Click(Sender: TObject);                                 // Dateneingabe

   begin

      if (Length(Edit1.text)>0)
         and (Length(Edit2.text)>0)                                             // schreibt Datensatz NUR wenn etwas eingetragen ist
         and (Length(Edit3.text)>0)
         then

            begin

               VereinDatensatz.Vorname := edit1.text;
               VereinDatensatz.Nachname := edit2.text;
               VereinDatensatz.Geburtstag := edit3.text;

               if CheckBox.checked                                              // Überprüfung: bezahlt?
                  then Vereindatensatz.bezahlt := 'Ja'
                  else Vereindatensatz.bezahlt := 'Nein';

               if not eof(Vereindatei)
                  then seek(Vereindatei, filesize (Vereindatei));

                       write (Vereindatei, Vereindatensatz);

                       edit1.text := '';
                       edit2.text := '';                                        // Edit-Felder leeren

                       edit3.text := '';

                       Label12.caption := inttostr (Filesize(Vereindatei));

            end

         else showmessage('Bitte füllen Sie alle Felder aus!');

   end;

procedure TForm1.Button5Click(Sender: TObject);                                 // Datenausgabe

   begin

      Seek(Vereindatei, 0);

      Read(Vereindatei, Vereindatensatz);

      Label9.Caption := Vereindatensatz.Vorname;
      Label10.Caption := Vereindatensatz.Nachname;
      Label11.Caption := Vereindatensatz.Geburtstag;
      Label4.Caption := inttostr(Filepos(Vereindatei));
      Label14.Caption := Vereindatensatz.bezahlt;

   end;

procedure TForm1.Button7Click(Sender: TObject);                                 // einen Datensatz weiter

   begin

      if eof (Vereindatei)
         then

            begin

               seek(VereinDatei, filesize (VereinDatei));

               showmessage ('Letzter Datensatz erreicht')

            end

         else

            begin

               Read(Vereindatei, Vereindatensatz);

               Label9.Caption := Vereindatensatz.Vorname;
               Label10.Caption := Vereindatensatz.Nachname;
               Label11.Caption := Vereindatensatz.Geburtstag;
               Label4.Caption := inttostr(Filepos(Vereindatei));
               Label14.Caption := Vereindatensatz.bezahlt;

            end;

   end;

procedure TForm1.Button6Click(Sender: TObject);                                 // einen Datensatz zurück

var posi: integer;

   begin

      posi:= filepos(Vereindatei)-2;
     if posi<0 Then BEGIN posi:=0; showmessage('Erster Datensatz erreicht') END ELSE
     BEGIN
     Seek(Vereindatei, posi);
     Read(Vereindatei, Vereindatensatz);
     Label9.Caption := Vereindatensatz.Vorname;
     Label10.Caption := Vereindatensatz.Nachname;
     Label11.Caption := Vereindatensatz.Geburtstag;
     Label4.Caption := inttostr(Filepos(Vereindatei));
     Label14.Caption := Vereindatensatz.bezahlt;
     end;

   end;

procedure TForm1.Button2Click(Sender: TObject);                                 // Suche

   begin

      seek (Vereindatei,0);

      repeat

      read (VereinDatei, VereinDatensatz);

      if edit4.Text = VereinDatensatz.Vorname then

     begin

          Label9.Caption := Vereindatensatz.Vorname;
          Label10.Caption := Vereindatensatz.Nachname;
          Label11.Caption := Vereindatensatz.Geburtstag;
          Label4.Caption := inttostr(Filepos(Vereindatei));
          Label14.Caption := Vereindatensatz.bezahlt;

     end;

     until eof(Vereindatei);


end;

end.



danke

Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
MDX
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 595
Erhaltene Danke: 4

Windows 8.1, Linux Debian 8, Android Lollipop
Delphi, PHP, Java (Android)
BeitragVerfasst: So 08.03.09 18:28 
Vergeben kann man automatische Benutzer-IDs normalerweise mit AUTO_INCREMENT :!:
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 08.03.09 20:08 
Hallo und :welcome: in der Entwickler-Ecke, user profile iconxflopx

user profile iconMDX hat folgendes geschrieben Zum zitierten Posting springen:
Vergeben kann man automatische Benutzer-IDs normalerweise mit AUTO_INCREMENT :!:

Es handelt sich hier um typisierte Dateien, nicht um eine Datenbank wie MySQL ;)

Aber vielleicht wäre eine Datenbank gar keine so schlechte Idee. In deinen Code müsste ich mich jetzt erst länger einlesen, jedoch dürfte das Sortieren in den etwas veralteten (;)) Pascal-Dateiroutinen sehr kompliziert werden. Ich habe aber noch nie mit typisierten Dateien gearbeitet.

Aber wenn du etwas mehr über den Quelltext schreiben würdest - zum Beispiel ein paar Kommentare oder die relevante Stelle - könnten wir dir vielleicht besser helfen.

Grüße,
Yogu
MDX
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 595
Erhaltene Danke: 4

Windows 8.1, Linux Debian 8, Android Lollipop
Delphi, PHP, Java (Android)
BeitragVerfasst: So 08.03.09 20:25 
Naja, ich hab nur gelesen dass, das Topic im Forum "Datenbank" steht, deshalb AUTO_INCREMENT =)
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: So 08.03.09 20:55 
Zum Sortieren:
Du nimmst einen beliebigen Sortieralgorithmus, vergleichst mit dem die Nummern und wenn getauscht werden muss, tauschst Du den gesamten Record.

Zum automatisch Vergeben:
In einer (globalen) Variablen könnte man die aktuelle Nummer mitzählen und dann immer gleich in eine Datei (z.B. Ini-Datei) speichern. Beim Programmstart liest man diesen Wert aus der Datei.

Zu Deinem Programm:
Bitte gib den Edit-Feldern und den Labels, auf die Du zugreifst, sinnvolle Namen (z. B. EditVorname, VornameEdit, edtVorname, oder so was in der Art), dadurch wird das Programm besser lesbar und die Fehlersuche einfacher.

ub60