Ich würde das wie folgt lösen:
1) Für jede Tabelle eine eigene Klasse, die die Zugriffe auf die
DB kapselt.
Dabei wird der Zugriff über Methoden gesteuert (z.B. SelAlles, Insert, Update, Delete, CopyToRec, CopyToLst)
2) Für jeden Datensatz eine eigene Klasse, die für jedes Feld aus der
DB eine eigene Eigenschaft hat.
Objekte davon werden an die entspr. Methoden der Tabellenklasse übergeben (z.B. TTabelleTest.CopyToRec(Rec:TDatensatzTest)
3) Für jede Tabelle sollte es eine eigene Objektlisten-Klasse geben, die nur mit Objekten des richtigen Typs arbeiten sollte.
Dadurch kann die Klasse dann auch tabellenspezifische Methoden haben. (z.B. SucheNachPrimaryKey...)
Wenn die Datensätze erstmal im Speicher als Objekte vorliegen kannst Du damit alles machen, was Du willst. Du kannst sogar eigene Klassen bauen, die z.B. zwei TDatensatzTest-Objekte enthalten. Eine als Original, eine als Arbeitskopie. Dadurch lässt sich dann später feststellen, ob es tatsächlich eine Änderung an den Daten gegeben hat...