In ein PageControl wurden zur Laufzeit auf mehreren Tabsheets je ein Frame "eingeklebt".
Tabsheets und Frames werden zur Laufzeit (teilweise vom User) erzeugt.
Funktioniert alles wie erwartet.
Auf einigen dieser Frames sind TDBGrids (mit je eigener Datasource).
Nun sollen Datensätze von einem Frame zum anderen "kopiert" werden.
In Wahrheit werden ausgewählte Datensätze nur in eine DB-Tabelle kopiert und sollen vom anderen Frame aus der DB eingelesen werden -- passt, solange ich zum betroffenen Frame gehe und die Aktualisierung per Button starte.
Allerdings soll nun die Anzeige des Frames in das "kopiert" wird automatisch gleich nach dem Kopiervorgang aktualisiert werden.
Nachdem ich den Namen des Frames weiß kann ich das Frame suchen und die Aktualisierung starten. Dachte ich zumindest
Code: Alles auswählen
procedure TFramSelektStandard.RefreshTarget(sComponentName: string);
var
c:TComponent;
begin
c:=FindComponent(sComponentName);
//gefundene Komponente auf den Frametyp casten und die Abfrage aktualisieren
TFramSelektStandard(c).RunQuery;
end;
Code: Alles auswählen
procedure TFramSelektStandard.RunQuery;
begin
ZQuery.DisableControls;
if ZQuery.Active then
ZQuery.Close;
try
//SQL zur Abfrage erstellen
ZQuery.SQL.Text := FoMyQBE.GenerateSQL;
finally
freeandnil(FoMyQBE);
end;
ZQuery.Open;
ZQuery.EnableControls;
end;
Lässt sich kompilieren, läuft.
Zur Laufzeit scheint das richtige Frame gefunden zu werden, allerdings bekomme ich bei der Zeile ZQuery.DisableControls; eine ACCESS VIOLATION.
kommentiere ich die aus kracht es eben eine Zeile später.
Nun verstehe ich nicht warum eine gefundene Komponente, die ja existiert Probleme macht wenn ich die DB-Anbindung aktualisieren will. Zwar ist das Zielframe in diesem Moment nicht sichtbar aber zumindest ein ZQuery.Active sollte doch klappen?
Irgendwelche grundlegenden Ideen die euch ins Auge springen bevor ich eine Demo bauen muss?
