Doppeltes Komponenten-Array ... Problem! (Delphi)

RealSucker

Mitglied
Ich benutze bei einem Programm die PageControl-Komponente um es übersichtlich zu halten.
Auf jedem TabSheet sind mehrere Komponenten, die auf die gleiche TTable und TDataSource zugreifen. Wenn ich nun auf ein TabSheet klicke, wird per OnShow eine externe Table passend zu der Seite beim DatabaseName der TTable angepasst, wodurch die Komponenten auf der vorherigen Seite natürlich eine Fehlermeldung ausgeben, denn ihre Spalten sind ja nicht mehr verfügbar.
Mit Hilfe eines Komponenten-Arrays habe ich alle Datafield-Eigenschaften der Komponenten des vorherigen TabSheet leer gemacht. Das Ganze wird bei mehreren TabSheets sehr umfangreich und deswegen habe ich es mit einem doppelten Komponenten-Array probiert, der alle Komponenten auf jedem TabSheet ändert.
Nach dem doppelten Komponenten-Array werden die Datafield-Eigenschaften der Komponenten des aktuellen TabSheets erst definiert. Dadurch können also auch ruhig erst einmal alle Datafield-Egienschaften zurückgesetzt werden.

Nun der Code:
Code:
for k := 0 to ComponentCount - 1 do
begin
if Components[k] is TTabSheet then
for j := 0 to TTabsheet(Components[k]).ControlCount-1 do
begin
if TTabsheet(Components[k]).Controls[j] is TDBEdit then
TDBEdit(TTabsheet(Components[k]).Controls[j]).DataField:='';
end;
end;

So funktioniert es momentan leider nicht. Ich hoffe, ich habe eine ausreichende Erklärung abgegeben, damit mir jemand helfen kann. ;)
Ansonsten muss ich wohl doch die gesamte Form mit TTable und TDataSource pflastern und hätte das gleiche wie alle anderen Gruppen. :(

Gruß RS
 
Obwohl ich mir nicht sicher bin, ob es wirklich Sinn macht,
könntest Du folgendermaßen arbeiten:

Verwende zwei Tabellen und Datasources
DataSourceEmpty zeigt auf TableEmpty und TableEmpty bleibt stets inaktiv (kein Open)
DataSourceExtern und TableExtern verwendest du für deine Tabellen.

Lasse alle Datensensitiven Elemente aller Sheets zunächst auf DataSourceEmpty zeigen
Damit gibt es keine Fehler, da ja TableEmpty nicht geöffnet ist.

Wenn Du nun deinen Sheet wechselst, und die die externe Tabelle verwendest, dann
Setzt du zuerst für alle datensensitiven Komponenten DataSource (wieder ) auf DataSourceEmpty. Anschließend setzt du für alle entsprechenden datensensitiven Komponenten des gewünschten Sheets die Eigensschaft DataSource auf DataSourceExtern, die entsprechend die geladene TableExtern verwendet.

So könnte es gehen,

Aber wie gesagt, für sinnvoll halte ich das nicht. Für jede Tabelle eine eigene DataSource und Table-Komponente halte ich wirklich für sinniger, so kannst Du übrigens auch auf Daten zugreifen, die nicht sichtbar auf anderen Sheets Verwendung finden.

Hoffe es hilft dir weiter,
vop
 
Das mit der Empty-Table und so, würde ja wieder das selbe problem darstellen. Auch da hätte ich dann wieder an die 40 Zeilen nur um die Datafields leer zu machen.
Für jedes ne eigene Table zu machen, geht natürlich, aber wäre doch schön, wenn es auch anders geht.
Kann man vielleicht irgendwie abfragen, ob eine Komponente die Eigenschaft "Datafield" hat?
Dann sollte das mit einer einem einfachen Komponenten-Array auch klappen.
 

Neue Beiträge

Zurück