El asunto es este y si me equivoco, pido por favor a aquellos reconocidos maestros o cualquier otro que se sienta cómodo y seguro para corregirme que lo haga.
Un consejo simple.
Siempre que creo un Datamodule suelo hacerlo definiendo ahí mismo las transacciones y la base de datos. Además creo en forma visual las consultas, datasets, tablas, procedimientos, etc.
Para cerrar más cualquier idea hablo del uso de Interbase express.
Esto me permite controlar los eventos y lo que comúnmente llaman lógica de negocio.
También es posible encapsular todo este mecanismo, haciéndolo a la vez, más fácil de hallar errores.
Al utilizar controles en un TForm será necesario crear un data source (TDataSource) que haga de interfaz entre el control visual y el componente que a su vez hace de interfaz con la base de datos que puede ser una tabl, una consulta, etc.
En fin lo que quiero comentar es que solía, no se si por comodidad o por "inercia" acceder a los campos de los datasets del datamodule de la siguiente manera:
dsUnDataSource.Dataset.FieldByName('NOMBRE_CAMPO').AsTiipo;
Por lo que arrastrado una vez más por esta "inercia" solía crear un DataSource por cada dataset que utilizaría en el form. Pero más tarde hallé que esto es en sí un error por ser algo innecesario e indirecto.
Lo que hago actualmente es:
dmUnDataModule.qryUnaConsula.FieldByName('NOMBRE_CAMPO').AsTipo;
Al parecer es lo mismo, pero en realidad es algo más directo y además permite acceder a muchas características propias del tipo de objeto que fuere, por ejemplo un procedimiento, un dataset, una consulta, una tabla, tendrán eventos y propiedades que no pueden ser accedidas desde el objeto dataset que está atado al datasource. Esto me trajo muchas complicaciones en cuanto a la claridad del código, ya que a veces aparecía la primera versión y cuando era necesario, la segunda, con lo que me consumía más tiempo.
En el ejemplo escribí FieldByName, puede ser FieldValue, etc
Otra de las ventajas de no acceder indirectamente a los datasets es que se evita la creación de objetos innecesarios.
Es posible acceder a los datasets desde el mismo objeto visual, pero ese es otro tema.
También sé que hay personas que no utilizan datamodules, ni crean estos objetos de forma visual, pero eso ya va en gusto y cabe la aclaración que de la segunda manera es posible hallar errores más fácilmente.
Saludos