Kommt darauf an wie Du so etwas realisierst
Je nachdem wie normalisiert die
DB ist, kannst Du mit einem View den Zugriff schon vereinfachen.
Um Mißverständnissen vorzubeugen, die Oberfläche benötigt natürlich ein "Datenänderungs"-Event, daß dann die entsprechenden Änderungen/Abfragen anstößt.
Ich habe den TE so verstanden, dass er 2 getrennte Datenquellen hat (Master/Detail), wobei eben die Detaildatenquelle automatisch nachgeführt / synchron angezeigt werden soll, sobald die Masterquelle den activen Datensatz ändert. Ein View würde an der Aufgabenstellung nichts ändern/lösen.
Ansonsten bin ich der letzte, der etwas gegen die Verwendung von Views sagen würde. Meinetwegen kann man ausschließlich Views verwenden.
Wenn du ein View hast, das im Gegensatz zur Original-Mastertabelle nicht nur die Id eine Subtabelle anzeigt, sondern den Eintrag aus der gewünschten Spalte, dann wird das auch so im DBGrid angezeigt. Wenn es jedoch darum geht, daß das Scrollen in der View-Datenmenge gleichzeitig zu einem Anzeigen des entsprechenden Datensatzes in der Original-Datenmenge sowie in der Sub-Datenmenge führt, ist es erforderlich, im OnScroll-Handling der View-Datenmenge die beiden anderen zu lokalisieren.
Wir habne hier eine Anwendung, die in einem
DB-Grid im oberen Bereich des Formulars die View-Datenmenge anzeigt, während beim Scrollen dieser View-Datenmenge automatisch im unteren Bereich die Feldinhalte in
DB-sensitiven Komponenten (TDBEdit usw.) angezeigt werden. Die Inhalte der jeweiligen Subtabellen-Felder werden in jeweils einer
TDBLookupComboBox angezeigt. Dort trägt man in der Eigenschaft
DataSource den Namen der Mastertable-Datasource ein, entsprechend in
DataField das Feld, das den FK (Foreign Key) für die Subtabelle enthält. Der FK der Mastertabelle sollte der gesuchte PK der Subtabelle sein. Nun trägt man in
ListSource das DataSource der Subtabelle ein, in
KeyField kommt das Feld mit dem PK der Subtabelle, und in
ListField das Feld, das in der TDbLookupComboBox angezeigt werden soll. Steht auch alle so in der
Hilfe.
Die Anzeigen in TDbLookupComboBox werden beim Scrollen durch die Datenmenge der Mastertabelle automatisch aktualisiert. Zur Synchronisation zwischen View und Mastertabelle schreiben wir im AfterScroll des Views:
Delphi-Quellcode:
procedure TDatenModul.ViewMasterTabelleAfterScroll(DataSet: TDataSet);
begin
MasterTabelle.Locate('ID_MASTER',ViewMasterTabelle.FieldByName('ID').AsInteger,[]);
end;
Hier wird das View nur dazu verwendet, eine lesbare Tabelle im Grid anzeigen zu können. Das Scrollen des Views lokalisiert automatisch den zugrundeliegenden Datensatz der Mastertabelle. Man könnte in ViewMasterTabelleAfterScroll auch einen
SQL-Befehl reinschreiben, der immer nur den einen Datensatz selektiert. Bei einer großen Datenmenge ist das bestimmt günstiger, als ständig zwei nahezu gleiche Datenmengen im Speicher zu halten.