Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - fehlende Informationen eines Records anzeigen
Delete - So 15.06.08 14:32
Titel: fehlende Informationen eines Records anzeigen
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:
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..30] of 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
Narses: Code- durch Delphi-Tags ersetzt
Narses - So 15.06.08 15:03
Titel: Re: fehlende Informationen eines Records anzeigen
Moin und :welcome: im Forum!
Tino the Rino hat folgendes geschrieben: |
| Über Vorschläge und Verbesserungen würde ich mich sehr freuen. |
OK, dann mal los: ;)
Delphi-Quelltext
1: 2: 3:
| var schueler: array[1..30] of TSchueler; anzahl: Integer = 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:
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:
Tino 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
Delete - So 15.06.08 15: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 - So 15.06.08 15:44
Moin!
Tino 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!