Hola,
he seguido con mi investigación y tengo lo siguiente:
Aqui hay una información muy interesante acerca de dbExpress
http://conferences.c...p/article/32229 donde podemos denotar lo siguiente:
Connecting to data requires the database to be identified, the data table(s) and columns selected and a request for the defined data. The major difference between dbExpress and the other RAD data connectivity options is dbExpress only supports unidirectional, read-only cursors for data retrieval. This means no data is buffered and some of the features available in the other data connectivity options are not applicable.
En pocas palabras, la "magia" la realiza DataSnap (MIDAS) como se explica aqui:
The DataSetProvider creates datapackets based on the SQL statement defined by the CommandText property and used by the SQLDataSet. The datapackets are cached in memory. When edits are sent back to the database, the DataSetProvider processes datapackets containing just the modified records; it creates the appropriate SQL statements that are sent to the database.
En este sentido, es necesario utilizar el ClientDataset y el DataSetProvider para que dbExpress funcione bi-direcccionalmente.
Entonces, el esqueleto se puede interpretar de la siguiente manera, el ClientDataSet entrega los llamados data-packets o paquetes de datos al DataSetProvider, en este caso (mi inquietud planteada en el enlace de arriba) estamos hablando del valor que es pasado mediante la propiedad CommandText. El DSP llama un procedimiento denominado SetCommandText que recibe el valor antes dado por el CDS, este es antes verificado asi como que su propiedad poAllowCommandText este habilitada, de no ser asi, tenemos el primer error de la base de datos.
Hecho esto es llamada la interface IProviderSupport a la que se es asignado el Dataset, en este caso el TSQLQuery y se llama el procedimiento PSSetCommandText que hace lo siguiente:
The value of the CommandText parameter replaces the dataset’s SQL statement (if it has one), or replaces the name of an underlying database table or stored procedure.
Ejecutandolo con el procedimiento PSExcecute:
The provider component calls PSExecute to implement its Execute method. If the dataset represents a query or stored procedure that does not return a cursor, this method executes the query or stored procedure. If the provider Options includes poAllowCommandText and the dataset supports the PSSetCommandText method, the statement specified by PSSetCommandText may be executed instead.
Por lo que el valor incial de la consulta en el SQLQuery debería ser reemplazada temporalmente por nuestra nueva consulta desde el CommandText.
Ahora bien, si tenemos una relación Maestro-Detalle y en el detalle ejecuto la nueva sentencia, no obtengo respuesta, ¿porque?, pienso tal vez que esta se ejecuta dentro de los valores disponibles en el encabezado, aún así, si hubiera uno solo obtenemos un error de la base de datos...
Esto seguira, hasta tener respuesta
Saludos!