Ogni volta che applichi modifiche ai dati, una transazione viene automaticamente avviata sul DB, poiché si tratta di un elemento imprescindibile per fornire il contesto nel quale viene inserita qualsiasi modifica apportata ai dati.

Quando esegui CommitRetaining, non fai altro che confermare la transazione che contiene le modifiche apportate ai dati dal tuo programma.

Invocare CommitRetaining ad ogni post equivale a confermare definitivamente ogni inserimento/modifica al record appena dopo che una di queste operazioni viene effettuata.

Se hai la necessità di inserire più record, anche in tabelle diverse, occorre innanzitutto evitare questo "automatismo" codificato, e gestire le cose in questo modo (salvo accorgimenti particolari dovuti al contesto in cui vengono applicate e di cui non sono a conoscenza):

[list=1][*]avviare una nuova transazione quando si sta per consentire la modifica dei dati (c'è il componente IBTransaction che fornisce tutti i metodi necessari)[*]escludere la chiamata a CommitRetaining per ogni operazione, in modo da mantenere attiva la transazione corrente senza confermarla ad ogni modifica[*]consentire all'utente di fare tutte le modifiche, gli inserimenti e le eliminazioni previste dal programma[*]in fase di conferma dei dati inseriti da parte dell'utente, eseguire CommitRetaining per confermare la transazione corrente e le modifiche eseguite nel suo contesto[/list=1]

L'uso del componente TClientDataSet che hai citato, nel contesto attuale, non è indispensabile poiché ha altre finalità: ad esempio, potrebbe essere utilizzato per lavorare con i dati esclusivamente in memoria e, al momento della conferma generale, 1) avviare una transazione, 2) salvare tutti i dati possibili, 3) confermare i dati inseriti con una Commit.

Mentre i componenti che utilizzi lavorano in modalità "connessa", il TClientDataSet ti permette di lavorare invece in modalità "disconnessa" (facendoti scaricare i dati dal server, lavorandoci senza essere collegato e infine, quando necessario, solo nel momento in cui il server database è disponibile, pubblicando le modifiche sul server).
Ma si tratta di un altra tematica, più legata all'architettura dell'applicazione rispetto a un semplice diverso utilizzo delle transazioni.

Ciao!