Уважаемый slyubez, то, что транзакция сразу стартует в состоянии "committed" на стороне сервера вовсе не означает, что она "закрыта". В некотором смысле это "фича" конкретного сервера FireBird. Насколько мне известно, на всех остальных серверах "закрытие" транзакции, то бишь вызов committed, прекращает транзакцию, после чего никакие операции с данными больше не возможны. Мало того, даже при работе с сервером FireBird после того, как вы запустили свою транзакцию в режиме read, read_committed, её можно закрыть вызовом committed точно также, как и любую другую транзакцию.
То есть, вы правы по сути, но сформулировали свою мысль не совсем корректно с технической точки зрения.
Что касается DB-aware компонентов, то тут всё зависит от решаемой задачи. Для простых проектов, при правильном их использовании, они вполне себе работают.
Если же разрабатывать крупный проект, то работать с "голыми" StringGrid и ListView лично для меня было бы слишком неэффективным расходом времени и сил на написание однотипного кода. Гораздо проще было бы сделать свои более "умные" компоненты вместо встроенных. Но тут уже каждый сам себе командир.