AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Record im Array nutzen? - Sinnvollere Wege?
Thema durchsuchen
Ansicht
Themen-Optionen

Record im Array nutzen? - Sinnvollere Wege?

Ein Thema von Asura · begonnen am 10. Jul 2015 · letzter Beitrag vom 20. Jul 2015
Antwort Antwort
Asura

Registriert seit: 10. Jun 2013
87 Beiträge
 
#1

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 18. Jul 2015, 19:23
Guten Tag,
und zwar habe ich mich nun an der Klasse und an der Objectlist versucht:
Meine Klasse "Employee" hat die Properties, wie von Sir Rufo bereits vorgeschlagen.
Ich habe dann die Objectliste erstellt "OLEmployees".
Meine vorgehensweise sieht wie folgt aus:
Ich speichere in die Properties die Inhalte der Textfelder. Danach adde ich der Objectliste die Klasse Employee als neues Item dazu.

Die Initialisierungen und das Freigeben lasse ich hiermal weg, die finden in der Haupt-Unit im OnCreate und OnClose Event statt.

Delphi-Quellcode:
procedure TF_AddEditEmployee.btn_AddEditClick(Sender: TObject);
var EmployeeData: TStringlist;

begin

  EmployeeData := TStringlist.Create;

  EmployeeData.Add(edt_CardID.Text);
  EmployeeData.Add(edt_PreName.Text);
  EmployeeData.Add(edt_SurName.Text);
  EmployeeData.Add(DatetoStr(dt_Birthday.Date));
  EmployeeData.Add(edt_WorkStation.Text);
  EmployeeData.Add(edt_Position.Text);


      F_Employees.SelCardID := StrtoInt(edt_CardID.Text);

      try
        AddEmployeeData(F_Main.OLEmployees.Count, EmployeeData);

      except
        Messagebox(Self.Handle, 'Mitarbeiter konnte nicht hinzugefügt werden', 'Fehler',
                   MB_ICONWARNING or MB_OK);
      end;

      close;

  EmployeeData.Free;

end;

Delphi-Quellcode:
// *************************** Mitarbeiterhinzufügen ***************************

procedure AddEmployeeData(Index: Integer; EmployeeData: TStringlist);
begin

  F_Main.Employee.CardID := StrtoInt(EmployeeData[0]);
  F_Main.Employee.Prename := EmployeeData[1];
  F_Main.Employee.Surname := EmployeeData[2];
  F_Main.Employee.Birthday := StrtoDate(EmployeeData[3]);
  F_Main.Employee.Workstation := EmployeeData[4];
  F_Main.Employee.Position := EmployeeData[5];

  F_Main.OLEmployees.Add(F_Main.Employee); // Employee Daten werden als neuer Eintrag gespeichert

end;
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden? Ich kann ja schlecht IndexOf benutzen, da ja alle Items das gleiche Object (Employee) haben nur mit anderen Properties.
Zurzeit wäre ja jedes neue Item der Objectlist ein neuer Mitarbeiter mit den Eigenschaften von Employee.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 18. Jul 2015, 19:44
@Asura: Warum dieser Umweg über die Stringliste?

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 10:22
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden?
Na, so wie man es immer macht, nach property sortieren und dann suchen!?

Alternativ kann man auch entsprechende Indizes erstellen und über die dann den Zugriff steuern.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Asura

Registriert seit: 10. Jun 2013
87 Beiträge
 
#4

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 11:16
@Dalai:

Ich dachte mir für jede Property ein Parameter zu nehmen, wo ich den Inhalt eines Editfeldes übermittle ist unschön.
Oder gibt es eine andere Methode?

@p80286:

Muss ich mir dafür eine Funktion schreiben, oder wie kann ich nach der Property suchen?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#5

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 12:03
@Dalai:

Ich dachte mir für jede Property ein Parameter zu nehmen, wo ich den Inhalt eines Editfeldes übermittle ist unschön.
Oder gibt es eine andere Methode?
Ich würde das Objekt erzeugen, dann befüllen und dann der Liste hinzufügen. Wenn man mal die Klasse TEmployee von Sir Rufo als Vorlage nimmt, würdest du ein solches Objekt (statt der Stringliste) erzeugen, dessen Eigenschaften setzen (statt die Strings in die Stringliste zu packen) und das entstandene Objekt in die Liste einfügen (statt die Stringliste zu übergeben). Ich hoffe, die Beschreibung ist auch ohne Code verständlich, momentan hab ich weder Zeit noch Lust (vor allem bei der Wärme), mich auch geistig irgendwie anzustrengen...

MfG Dalai
  Mit Zitat antworten Zitat
Asura

Registriert seit: 10. Jun 2013
87 Beiträge
 
#6

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 12:26
@Dalai:

Ich habe es glaube ich aber trotzdem verstanden. Im Prinzip überspringst du einfach die Parameterübergabe von der einen Unit zur anderen und fügst gleich die Inhalte den Eigenschaften von dem Objekt Employee und fügst das dann der Objektliste zu.

Ich frage mich aber wie ich die Funktion Equals der Klasse TEmployee von Sir Rufo nutzen kann, könnte man mir da eventuell ein Beispiel geben?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 12:51
Mit function TObject.Equals( Obj: TObject ): Boolean; kann man Instanzen auf Gleichheit prüfen.

Und zwar im Sinne von "stellen das Gleiche dar".

Zwei unterschiedliche Instanzen von TEmployee können ja die gleiche ID haben und stellen somit das Gleiche dar.
Delphi-Quellcode:
var e1, e2: TEmployee;

if e1 = e2 then
  ShowMessage( 'Gleiche Instanzen' );
if e1.Equals( e2 ) then
  ShowMessage( 'Gleiche Bedeutung' );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Asura

Registriert seit: 10. Jun 2013
87 Beiträge
 
#8

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 13:49
Dankeschön!

Ich habe noch eine weitere Frage:
Wenn ich einen Mitarbeiter hinzufüge über den Button erfolgt nun folgendes:
Ich erstelle ein neues Objekt mit  Employee.Create(); speichere dann die Inhalte in die Property von Employee und füge das dann der Liste hinzu.

Nun meine Frage ist jz, muss ich mit dem Objekt von TEmployee arbeiten oder muss ich pro Mitarbeiter ein neues Objekt von TEmployee erstellen mit einer Index-Nummer (Beispielsweise Employee1, Employee2 usw.) und dieses dann über Employee1.Create(); initialisieren?

Weil in meiner Methode hätte TObjectlist ja jedes Object in der Liste mit dem Namen "Employee", nur mit verschiedenen Properties oder kann ich das so machen?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 11:19
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden?
Na, so wie man es immer macht, nach property sortieren und dann suchen!?
Immer?
1x suchen: Linear durchsuchen.
öfter suchen: Dictionary.
Sortieren und dann suchen? Ich jedenfalls nie.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz