Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Record-Variable in Klasseninstanz setzen

  Alt 9. Dez 2012, 17:09
Wird denn die Variable von TMain_Zugriff User_Tab : TTab_User; initialisiert?
Inzwischen befindet sich die Variable nicht mehr in TMain_Zugriff, sondern in TDatMod (Datenmodul). Die Initialisierung hat sich jedoch nicht geändert, sie erfolgt nach wie vor aus der Unit MainTools heraus (mit DatMod. statt wie zuvor mit MZGF.), die alle Datenbank-Aktionen des Hauptformulars übernimmt:

Delphi-Quellcode:
procedure TMainTools.Einstellungen_Setzen;
CONST
     N = '0';
VAR
   i,z,
   Links,
   Oben,
   Breit,
   Hoch : Integer;
   Maximiert : Boolean;
   Aus : String;

begin
     IF NOT DatMod.Aset_Benutzer.Active THEN EXIT;

     Rec_User.User_Index := DatMod.Aset_Benutzer.FieldByName('Idx_Benutzer').AsInteger;
     Rec_User.Name := DatMod.Aset_Benutzer.FieldByName('Name').AsString;
     Rec_User.Pass := DatMod.Aset_Benutzer.FieldByName('Passwort').AsString;

     Links := DatMod.Aset_Benutzer.FieldByName('Links').AsInteger;
     Oben := DatMod.Aset_Benutzer.FieldByName('Oben').AsInteger;
     Breit := DatMod.Aset_Benutzer.FieldByName('Breit').AsInteger;
     Hoch := DatMod.Aset_Benutzer.FieldByName('Hoch').AsInteger;
     Maximiert := DatMod.Aset_Benutzer.FieldByName('Maximiert').AsBoolean;

     MZGF.Set_FormMain(Links, Oben, Breit, Hoch, Maximiert);

     IF NOT DatMod.Aset_UserTabs.Active THEN EXIT;
     IF NOT DatMod.Aset_UserTabs.Locate('Idx_User_Tabs',Rec_User.User_Index,[]) THEN EXIT;

// 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;

     DatMod.Aset_Titel.Locate('Idx_Titel',DatMod.User_Tab.Titel_Index,[]);
     Sortieren_FilmTitel(DatMod.User_Tab.Titel_SortIndex);

     z := MZGF.Spalten_Filmtitel -1;
     FOR i := 0 TO z DO
     BEGIN
          Aus := IntToStr(i);
          IF i < 10 THEN Aus := N + Aus;
          Aus := 'Tab_Titel_' + Aus;
          MZGF.Set_Spalte_FilmTitel(i,DatMod.Aset_UserTabs.FieldByName(Aus).AsInteger);
     END;
end;
Was ich nicht verstanden hatte: Wieso funktionierte ein ähnliches Konstrukt in einer anderen Klasse (und Unit) vom Hauptformular aus und das im ersten Post gezeigte Konstrukt vom Datenmodul aus nicht?

Das AfterScroll-Ereignis im Datenmodul wird bereits vor dem Setzen der Werte in MainTool ausgelöst, nach dem ersten Dataset.Open (korrekt: DatMod.User_Tab.Active := true) wird es garantiert ausgelöst – so dürfte der nicht-initialisierte Zustand der Variablen aber dennoch keine Rolle spielen, da der Wert der Variablen ja nicht ausgelesen, sondern gesetzt wird ... Das war es doch, worauf deine Frage zielte, oder?

Ich glaub ich muß für heute mal aufhören, sitze schon seit 5:30 hier ...
  Mit Zitat antworten Zitat