AGB  ·  Datenschutz  ·  Impressum  







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

Record im Array nutzen? - Sinnvollere Wege?

Ein Thema von Asura · begonnen am 10. Jul 2015 · letzter Beitrag vom 20. Jul 2015
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 13: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
 
#22

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 14: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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 14:53
Eine Instanzvariable ist eine Referenz (Zeiger) auf eine Instanz (Objekt). Du kannt die selbe wiederverwenden oder sogar ganz auf sie verzichten.
Markus Kinzler
  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
 
#24

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 14:56
Eine Instanz erzeugt man mit Employee := TEmployee.Create(); .

Employee.Create(); ruft nur den Konstruktor der Instanz auf, erzeugt aber keine Instanz!
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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.177 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 14:58
Ich erstelle ein neues Objekt mit  Employee.Create();
Das ist nicht korrekt. Damit rufst du den Konstruktor des existierenden Objektes Employee auf.
Neu erstellen geht nur mit  TEmployee.Create(); .
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Asura

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

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 22:26
Ohh stimmt, mein Fehler.

Die Frage bleibt aber, ob ich nun die Instanz mit dem gleichen Namen "Employee" nur neu erstellen oder jeweils der neuen Instanz eine Indexnummer angefügt werden soll, weil sonst kann ich doch in der FUnktion Equals keinen Unterschied festlegen, da er nicht weiß, welche Instanz nun überprüft werden soll.

Aber dann frage ich mich, ich muss diese Instanzen ja initialisieren in var:
Delphi-Quellcode:
 var
 Employee1, Employee2: TEmployee
. Wie soll ich da mit einer variablen Indexnummer arbeiten?

Geändert von Asura (19. Jul 2015 um 22:33 Uhr)
  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
 
#27

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 23:15
Die Frage verstehe ich nun gar nicht.

Es sei denn, du würdest die ID fälschlicherweise als Indexnummer bezeichnen. Die ID ist aber ein Identifizierer und kein Index. In einer Datenbank würde man es als Primary Index bezeichnen (eindeutiger Hauptindex) oder auch mal als Identity oder Unique Index (eindeutiger Index). Ein einfacher Index kann mehrfach vorkommen und eignet sich nicht als Identifizierer.

Hier sind also die exakten Begrifflichkeiten wichtig, weil die Frage ansonsten von niemandem verstanden wird.
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
 
#28

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 23:22
Nun, ich habe ja zwei Möglichkeiten eingetragene Daten in die Objectliste zu speichern:
Entweder ich nutze nur die Instanz Employee von der Klasse TEmployee und lasse sie mir vor dem speichern der Eigenschaften neu erzeugen.

Wie in meinem aktuellen Fall: Methode 1

Delphi-Quellcode:

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

  F_Main.Employee := TEmployee.Create();

  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

  showmessage(TEmployee(F_Main.OLEmployees.Items[0]).Prename); // dient als test
  showmessage(TEmployee(F_Main.OLEmployees.Items[1]).Prename); // dient als Test
end;
Methode 2:

Oder ich müsste für jeden eingetragenen Mitarbeiter beispielsweise eine neue Instanz mit Indexnummer versehen.
Beispiel:   F_Main.Employee1 := TEmployee.Create(); // Für Mitarbeiter 1 der eingetragen wurde   F_Main.Employee2 := TEmployee.Create(); // Für Mitarbeiter 2 der eingetragen wurde Weil bei Equals könnte ich ja dann im Prinzip im zweiten Fall einfach:
Delphi-Quellcode:
if Employee1.Equals( Employee2 ) then
  ShowMessage( 'blablabla' );
machen, welches im ersten Fall ja nicht so einfach geht, da ich ja nur eine Instanz habe, nämlich Employee.

Ich hoffe nun ist das verständlicher.

EDIT: Mit der Index nummer meine ich eig nur die Zahl hinter Employee, also Employee1, Employee2 usw.

Für mich ist Methode 1 einfacher und sie funktioniert auch insoweit, nur Frage ich mich, ob man doch Methode 2 anwenden soll.

Geändert von Asura (19. Jul 2015 um 23:25 Uhr)
  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
 
#29

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 23:32
Du kannst die StringList-Orgie komplett weg lassen. Anstatt die Werte aus den Edit-Feldern in eine String-Liste zu schreiben um diese dann von der String-Liste in eine neue TEmployee zu schreiben und diese Instanz dann in die Liste,

warum dann nicht gleich die Instanz mit den Werten aus den Edit-Feldern bestücken?

Machst du doch eh schon, nur mit dem Umweg über die String-Liste.
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
 
#30

AW: Record im Array nutzen? - Sinnvollere Wege?

  Alt 19. Jul 2015, 23:39
Das mit der TStringliste mache ich nur, weil ich sämtliche Methoden, die zu der Verarbeitung der Instanz Employee zuständig sind, in einer anderen Unit haben wollte. Ich rufe aus der Unit, mit einem Formular, nur die Funktionen auf, die zu der Verarbeitung zuständig sind und es werden hier nur Formatierungsangelegenheiten hinterlegt. Also die Verwaltung der Objektlist findet praktisch nur in der anderen Unit statt.

Ich wollte hier nur die wichtigen "Main-Funktionen" von Formatierung (Wie: Was passiert wenn Edit feld 1 geändert wurde) trennen.

Edit: Achso, ich glaube ich weiß worauf ihr hinaus wollt, das ich selbst in der anderen Unit einfach diese ansprechen kann, oder?

Geändert von Asura (19. Jul 2015 um 23:44 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf