Funktioniert es denn, wenn Du von Nested Types auf "normale" umsteigst? Wobei mir übrigens der Sinn so einer Klasse nicht ganz klar ist.
Keine Ahnung, was Nested Types bedeutet ... aber ich hab gleich mal nachgeschlagen und festgestellt, daß man darunter die Erstellung einer Klasse in einer Klasse (Nest) versteht. Also müßte ich den Record nicht innerhalb des anderen Types deklarieren:
Delphi-Quellcode:
unit Main_Zugriff;
INTERFACE
USES
Vcl.Forms, System.Classes, System.SysUtils, JvRichEdit, JvDBRichEdit;
TYPE
TTab_User =
RECORD
Titel_Index : Integer;
Titel_SortIndex : Integer;
Titel_SortOrder : Boolean;
Titel_SortText :
String;
END;
TMain_Zugriff =
CLASS
PRIVATE
PUBLIC
User_Tab : TTab_User;
Titel_Index : Integer;
Das ändert jedoch nichts, es erscheint derselbe Fehler. Nun habe ich der Klasse TMain_Zugriff eine weitere Procedure beigefügt, die User_Tab.Titel_Index ändern soll:
Delphi-Quellcode:
procedure TMain_Zugriff.Set_Titel_Index(Idx: Integer);
begin
User_Tab.Titel_Index := Idx;
Set_StatusBar(4,IntToStr(User_Tab.Titel_Index));
end;
Rufe ich diese Procedure von
Create aus auf, dann funktioniert sie:
Delphi-Quellcode:
constructor TMain_Zugriff.Create;
begin
Set_Titel_Index(11111);
end;
Rufe ich sie jedoch von
Aset_TitelAfterScroll (DatMod) aus auf, verweigert sie den Dienst:
Delphi-Quellcode:
procedure TDatMod.Aset_TitelAfterScroll(DataSet: TDataSet);
VAR
Idx_Titel : Integer;
begin
...
MainZu.Set_Titel_Index(Idx_Titel);
end;
Die anderen Proceduren wie z.B.
Set_StatusBar funktionieren aber von
Aset_TitelAfterScroll aus ... aber die ändern auch keine Variablen der eigenen Klasse, sondern die einer anderen Klasse (TFormMain).
Der Sinn dieser Klasse besteht darin (oder soll darin bestehen), nicht vom Datenmodul aus die Mainform referenzieren zu müssen, wenn Ereignisse im Datenmodul Veränderungen in der Mainform erfordern. Doch warum eigentlich nicht, die Mainform referenziert ja das Datenmodul nicht, das läuft alles über die
Unit MainTools. Deshalb hab ich das jetzt so gemacht:
In der
Unit UnitData (Form DatMod) hab ich als ersten Type meine Record-Deklaration platziert. Im Public-Teil von DatMod steht jetzt die Variablen-Deklaration des Records. So gibt's keine Zugriffsverletzung mehr ... Ob das die endgültige Lösung ist, wird sich zeigen.
Aber ich glaube, daß ich sowieso irgendwie auf dem Holzweg bin mit meiner Vorstellung über die Trennung von GUI und Methoden ... Vielleicht sollte ich mal SirRufo fragen, wie eine Kapselung für Datenbank-Komponenten aussehen muß ... immerhin propagiert er die ja des öfteren mal ...