Meine Idee ist natürlich nur eine Möglichkeit - die ich allerdings schon seit einiger Zeit einsetze und nie auf nennenswerte Probleme gestossen bin.
Es ist richtig, dass es keine direkte Verbindung zwischen Datenbank und Oberfläche gibt. Allerdings müssen keine neuen Komponenten 'erfunden' werden. Da Du völlig oberflächenunabhängig mit den Daten aus der
DB umgehst kannst du jede beliebige Komponente verwenden (z.B. TEdit, etc.).
Bei Programmstart dürfen nur die Daten aus Lookup-Tabellen geladen werden, da diese sich in der Regel während eines normalen Programmlaufs nicht ändern werden. Alle anderen Daten müssen "on demand" geladen (und auch wieder gespeichert werden).
Ein Beispiel:
1) Es wird eine Suche über den Kundennamen durchgeführt.
Deine Tabellen-Klasse setzt das
SQL-Statement ab. Hinterher werden alle gefundenen Sätze in einer Objektliste abgelegt.
Diese Daten werden beliebig (z.B. in einem Listview) angezeigt.
2) Der User wählt einen Kunden per Doppelklick aus dem Listview aus.
Im Hintergrund werden alle erstmal notwendigen Daten aus der
DB in den Speicher geladen (was mit "prepared"-Statements blitzschnell gehen sollte). Danach erfolgt wieder die Anzeige auf der Oberfläche (egal in welchen Komponenten).
Falls der User jetzt Daten bearbeitet müssen natürlich nur die Datensätze, die geändert wurden zurückgeschrieben werden. Dabei werden alle Felder des Datensatzes geupdatet. Auch die, die sich eigentlich nicht geändert haben. Zeitlich sollte man das vernachlässigen können.
Die einzige Frage, die zu klären wäre ist WANN die
DB-Updates zu machen sind. Und das ist abhängig vom Programmierer. Ich mache es z.B. immer, wenn das entspr. Fenster (auf dem die Editierung stattgefunden hat) geschlossen werden soll.