Ho preso un po' di tempo per analizzare velocemente il tuo codice.

Ci sono molte imperfezioni e utilizzi poco ortodossi delle proprietà e dei metodi dei componenti.

Ad esempio, nel richiamare il metodo Free si dovrebbe usare un costrutto try...finally per garantire che tale metodo venga eseguito anche al verificarsi di un'eccezione.

Il metodo ShowModal che visualizza una form "modale" restituisce già il valore che nel codice ottieni da ModalResult, quindi non hai bisogno di ispezionare quest'ultima proprietà per capire in quale modo è stato chiuso il form stesso.

Mi sembra anche molto dispendioso aprire e chiudere l'intera connessione ai dati per eseguire una semplice query e rinfrescare il contenuto di una ComboBox: basterebbe condividere con un DataModule il componente TADOConnection, aprire la connessione all'avvio del programma e riutilizzarla all'interno di componenti per l'accesso ai dati e l'esecuzione di query, magari evitando di crearli a runtime (quando non è necessario, come credo avvenga in questo caso) e facendo uso di parametri qualora le query debbano variare in base ad uno o più valori inseriti all'interno di una condizione (non sembra essere presente questa condizione, al momento, ma è ipotizzabile che succederà).

Infine, rileggendo attentamente il tuo messaggio, dici di non ottenere l'ultimo record inserito (e questo è il problema centrale) ipotizzando però che ciò sia dovuto ad una "latenza" nell'esecuzione della query che, secondo me, potrebbe non essere la vera causa del problema.

Analizzando il codice, immagino che non è stato riportato interamente (e non avrebbe senso), quindi fatico a comprendere realmente la fonte dei guai, ma ti esorto a fare un po' di "refactoring" e a semplificare il modo in cui lo hai steso, magari appoggiando componenti sul form invece di crearli a runtime ed evitando anche di aprire e chiudere connessioni, definendole a designtime.

Insomma, cerca di organizzare meglio il codice e, probabilmente, l'errore salterà agli occhi in modo quasi automatico.

Ciao!