Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#13

AW: Record-Variable in Klasseninstanz setzen

  Alt 10. Dez 2012, 02:09
Mann ist das ein Kuddelmuddel in dem Sourcecode!
Ich versuche mal Ordnung zu schaffen.
Wir beginnen mit dem Record:
Delphi-Quellcode:
TTab_User = RECORD
  Titel_Index : Integer;
  Titel_SortIndex : Integer;
  Titel_SortOrder : Boolean;
  Titel_SortText : String;
END;
und stellen die wichtigste Frage:
Könnte es nicht sein, dass TTab_User nicht eine Klasse statt einen Records sein sollte?
Eine Klasse ist im Prinzip ein Record + Methoden.

Antwort: Ja, es gibt potentielle Methoden für die Klasse TTab_User:
Delphi-Quellcode:
// Filmtitel - Initialisierung von User_Tab
DatMod.User_Tab.Titel_Index := DatMod.Aset_UserTabs.FieldByName('Titel_Index').AsInteger;
DatMod.User_Tab.Titel_SortIndex := DatMod.Aset_UserTabs.FieldByName('Titel_SortIndex').AsInteger;
DatMod.User_Tab.Titel_SortOrder := NOT DatMod.Aset_UserTabs.FieldByName('Titel_SortOrder').AsBoolean;
DatMod.User_Tab.Titel_SortText := DatMod.Aset_UserTabs.FieldByName('Titel_SortText').AsString;
Und damit sieht die Klasse im 1. Entwurf so aus:
Delphi-Quellcode:
TTab_User = class(TObject)
public
  TitelIndex : Integer;
  SortIndex : Integer;
  SortOrder : Boolean;
  SortText : String;

  procedure LoadFromDataset(ds:TDataset);
  procedure SaveToDataset(ds:TDataset);
  procedure Clear;
END;

procedure TTab_User.LoadFromDataset(ds:TDataset);
begin
  TitelIndex:= ds.FieldByName('Titel_Index').AsInteger;
  SortIndex := ds.FieldByName('Titel_SortIndex').AsInteger;
  SortOrder := NOT ds.FieldByName('Titel_SortOrder').AsBoolean;
  SortText := ds.FieldByName('Titel_SortText').AsString;
end;
Der Anfang ist gemacht.
Die weiteren Schritte sehen so aus:
* aus den public Variablen werden Properties gemacht
* weitere Methoden (z.B. procedure Clear oder SaveToDataset)entdecken und zur Klasse hinzufügen
* überprüfen ob die Klasse vollständig ist (gibt es noch weitere Felder aus der Tabelle "User_Tab"?)
* den Sourcecode der Klasse in eine eigene Unit verschieben
* Ein Objekt der neuen Klasse TTab_User in die Klasse TMain_Zugriff einbauen
* überlegen ob ein Objekt von TTab_User ausreicht oder ob man nicht eine Liste von diesen Objekten braucht
* müssen TTab_User-Objekte kopiert werden können? Fall ja, von TPersistent ableiten und die Methode Assign überschreiben

Geändert von sx2008 (10. Dez 2012 um 02:13 Uhr)
  Mit Zitat antworten Zitat