Es geht nicht darum, ob Du was falsch gemacht hast oder nicht, sondern darum ob es mit DBExpress geht oder nicht.
Der Fehler, der von Deine Exe geworfen wird, ist logisch nicht nachvollziehbar.
Wenn man in 'nem
SQL einen Alias für 'nen Spaltennamen angibt, also
select Funktion() as Spalte from Tabelle
schreibt, dann muss im Ergebnis die
qMain.FieldByName('SPALTE').AsString
funktionieren.
Wenn man in Deinem Programm also
SELECT last_insert_rowid() AS ID
eingibt, dann muss es im Ergebnis die Spalte ID geben, also
qMain.FieldByName('ID').AsString
verfügbar sein.
Dem ist aber nicht so. Das sieht für mich jetzt erstmal nach 'nem Fehler bei DBExpress aus, zumal das Ganze mit den Zeos-Komponenten ja funktioniert.
Und dass die SQLite-Datenbank bei identischen Statements aber unterschiedlichen Komponenten unterschiedliche Ergebnisse liefert, halte ich für eher unwahrscheinlich.