Autor Beitrag
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 15.06.08 15:32 
Hi,

weiß nicht, ob der Name des Themas gut gewählt ist, aber ich programmiere nur sehr selten und kenne mich daher auch mit vielen Begrifflichkeiten noch nicht so gut aus.
Habe auch schon die Suche benutzt, aber leider nichts passendes gefunden.

Zu meinem Problem:

Ich habe einen Record "TSchueler", welcher Name, Vorname, Alter und Kurs beinhaltet.
Weiterhin habe ich ein Array "schüler" [1..30] und
4 Editfenster, in die die Daten jedes Schülers eingegeben und daraufhin gespeichert werden.

Jetzt möchte ich bspw. gerne in das erste Edit-Fenster einen Namen eingeben und dann über einen Suche-Button die fehlenden Informationen in den anderen Edit-Fenstern anzeigen lassen.

Meine bisherige Lösung sieht so aus:

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:
type TSchueler = record
                  name: String;
                  vorname: String;
                  alter: String;
                  kurs: String;
                  end

var schuler: array [1..30of TSchueler;
    index: integer = 1;

procedure TListenform.Speichern;
  begin
    schuler[index].name:=NameEdit.Text;
    schuler[index].vorname:=VornameEdit.Text;
    schuler[index].alter:=AlterEdit.Text;
    schuler[index].kurs:=KursEdit.Text;
  end;

procedure TListenform.Anzeigen;
  begin
    NameEdit.Text:=schuler[index].name;
    VornameEdit.Text:=schuler[index].vorname;
    AlterEdit.Text:=schuler[index].alter;
    KursEdit.Text:=schuler[index].kurs;
  end;

procedure TListenform.SpeichernButtonClick(Sender: TObject);
begin
  SuchenButton.Enabled:=true;
  if index < 30 then
    begin
      Speichern;
      AnzahlEdit.Text:=IntToStr(index);
      inc (index);
      Anzeigen;
    end;
end;

procedure TListenform.SuchenButtonClick(Sender: TObject);
 var eintraege, indexhilf:integer;
begin
  indexhilf:=StrToInt(AnzahlEdit.Text);
  index:=1;

  for eintraege:=1 to 30 do

  if NameEdit.Text<>'' then
    begin
      repeat
        if schuler[index].name=nameedit.text
        then Anzeigen else inc(index);
      until schuler[index].name=nameedit.text;
          Anzeigen;
    end

  else if VornameEdit.Text<>'' then
    begin
      repeat
        if schuler[index].vorname=vornameedit.text
        then Anzeigen else inc(index);
      until schuler[index].vorname=vornameedit.text;
            Anzeigen;
    end

  else if AlterEdit.Text<>'' then
    begin
      repeat
        if schuler[index].alter=alteredit.text
        then Anzeigen else inc(index);
      until schuler[index].alter=alteredit.text;
            Anzeigen;
    end

  else if KursEdit.Text<>'' then
    begin
      repeat
        if schuler[index].kurs=kursedit.text
        then Anzeigen else inc(index);
      until schuler[index].kurs=kursedit.text;
            Anzeigen;
      end

  else
  Begin
  showmessage('Kein Suchbegriff eingegeben');
  break;  
  end;
 index:=indexhilf+1;
end;


Problem ist noch, dass zB wenn ich nur einen Teil des Namens eingebe ein Fehler auftritt, den würde ich gern abfangen und eine Meldung ausgeben.
Und vielleicht ist es auch möglich die Suche zu vereinfachen. Ich denke, ich habe bisher eine sehr umständliche Variante gewählt.

Über Vorschläge und Verbesserungen würde ich mich sehr freuen.

Grüße

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 15.06.08 16:03 
Moin und :welcome: im Forum!

user profile iconTino the Rino hat folgendes geschrieben:
Über Vorschläge und Verbesserungen würde ich mich sehr freuen.
OK, dann mal los: ;)
ausblenden Delphi-Quelltext
1:
2:
3:
var
  schueler: array[1..30of TSchueler; // OK so
  anzahl: Integer = 0// das würde ich als "Wasserstandsanzeiger" nehmen, am Anfang sind keine gespeichert = 0
Du hast die Information, wieviele Datensätze aktuell vorhanden sind, über ein Editfeld gelöst, das würde ich eher wie oben lösen. Beim Suchen brauchst du dann auch nur über die Anzahl der bisherigen Datensätze und nicht über alle zu laufen. :idea:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TListenform.Speichern(const AIndex: Integer);
begin
  schuler[AIndex].name := NameEdit.Text;
  schuler[AIndex].vorname := VornameEdit.Text;
  schuler[AIndex].alter := AlterEdit.Text;
  schuler[AIndex].kurs := KursEdit.Text;
end;
Ich würde der Prozedur mitgeben, welcher Datensatz geschrieben werden soll; analog natürlich beim Lesen, welcher Datensatz angezeigt werden soll. :idea:



user profile iconTino the Rino hat folgendes geschrieben:
Problem ist noch, dass zB wenn ich nur einen Teil des Namens eingebe ein Fehler auftritt, den würde ich gern abfangen und eine Meldung ausgeben.
Was kommt denn für ein Fehler? :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tino the Rino
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 15.06.08 16:32 
Also ich habe beispielsweise einen "Datensatz" mit Name, Vorname, Alter, Kurs eingegeben, dann gespeichert und dann gehe ich in ein Editfenster und gebe ein zu suchendes Wort ein, zB "Max" bei Name und er findet kein "Max" bei den Daten - kommt der Fehler:

Fehlermeldung hat folgendes geschrieben:
Im Projekt Schueler1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei der Adresse 0040426F in Modul 'Schueler1.exe'.
Lesen von 000581A0'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.


Will aber gerne, dass bspw. eine Meldung kommt: "Das Suchwort wurde nicht gefunden." - oder ähnliches.

Danke schonmal für deine Antwort - ich werde mal versuchen das umzusetzen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 15.06.08 16:44 
Moin!

user profile iconTino the Rino hat folgendes geschrieben:
Also ich habe beispielsweise einen "Datensatz" mit Name, Vorname, Alter, Kurs eingegeben, dann gespeichert und dann gehe ich in ein Editfenster und gebe ein zu suchendes Wort ein, zB "Max" bei Name und er findet kein "Max" bei den Daten - kommt der Fehler:
Das liegt daran, dass du bei einem Teilvergleich schon den Index erhöhst, dann läuft dieser zu schnell aus dem gültigen Bereich. :idea:

Bau das erstmal ein bischen um, wie beschrieben, dann sehen wir mal mit dem Suchen weiter. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.