nach langem Suchen und Versuchen im Zusammenhang mit einer kleinen Anwendung, die eine Sqlite-Datenbank verwendet (und über eine ZConnection einbindet), habe ich einen (sicher nicht den optimalen) Weg gefunden, wie auch letzte Änderungen in einem beliebigen Data Access Control beim Schließen der Anwendung sicher in der Datenbank landen (eigentlich sollten sie das mit AutoCommit:=True meinem Verständnis nach ja theoretisch immer, tun sie aber praktisch nur manchmal ... ich komme von MS Access und kenne daher wohl die BDE-Eigenheiten ebenso wie das OOP noch nicht gut genug): In OnFormCloseQuery alle Datasets, falls in einem dsEdit-State, posten lassen.
Nun zur eigentlichen Frage: kann man an Stelle von
Code: Alles auswählen
if dm1.queryA.State in [dsEdit, dsInsert] Then dm1.queryA.Post
if dm1.queryB.State in [dsEdit, dsInsert] Then dm1.queryA.Post
///(...)
if dm1.queryZ.State in [dsEdit, dsInsert] Then dm1.queryZ.Post
// "dm1" ist dabei das DataModule, in welchem alle TZQueries definiert sind.
Die Vorstufe einer Entsprechung zu for each element in gruppe: element.machwas wäre wohl etwas wie
Code: Alles auswählen
for aDataset in [dm1.queryA, dm1.queryB, ..., dm1.queryZ] do
begin
if aDataset.state in [dsEdit, dsInsert] Then aDataset.Post
end;
Da sich die grundsätzliche Frage ("Alle Objekte einer Klasse durchlaufen") auch auf andere Dinge bezieht, die nichts mit Datenbanken zu tun haben müssen, stelle ich sie mal zu den allgemeinen Einsteigerfragen.
Hat jemand einen Link, ein Beispiel oder das richtige Stichwort, nach dem man hier suchen muß - oder ist das generell gar nicht möglich?