Tipp:
Leite doch von TComponent ab, dann könntest du diese Komponente uch auf eine Form pappen (natürlich dazu noch in ein Designtime-
Package +
RegisterComponent)
Oder nimm gleich deine TZDataSource als Vorfahre, dann kannst zu deine Daten-Quelle auch direkt an andere Kompnenten (z.B. als DataSource für ein Grid) übergeben.
Und wenn du die Komponenten selber ableitest, dann kann man die "internen" Funtionen übrrschreiben, womit die Events ala AfterOpen frei bleiben.
Man kann später immernoch was Anderes an diese Events hängen. (vorallem praktisch, wenn man die Komponente auf eine Form gepappt hat und das Event nochmals ebenfals dort verwenden will.
AfterOpen wird z.B. über die virtuelle Methode
TDataSet.DoAfterOpen aufgerufen.
Ansonsten wurde ja schon das Wichtigste, zum eigentlichen Problem, gefragt.