Seguimos el experimento, intentado satisfacer nuestra curiosidad. 🙂
Vamos a hacer lo siguiente:
* En el modulo de datos eliminamos los dos componentes TClientDataSet que contienen los detalles. Es decir, cdsComposicion y cdsComponentes desaparecen. Tambien eliminamos todos los campos persistentes del dataset maestro cdsArticulos Logicamente, una vez hecho esto, los dos componentes TDataSource ligados a los mismos (a cdsComposicion y a cdsComponentes) ahora han perdido las referencias a los dataset y apuntan a nil.
* Vamos a añadir en el evento OnCreate del modulo principal un par de lineas para suplir las dos asignaciones perdidas.
procedure TMainTest.FormCreate(Sender: TObject); begin dsComposicion.DataSet:= TDataSetField(dsArticulos.DataSet.FieldByName('qComposicion')).NestedDataSet; dsComponentes.DataSet:= TDataSetField(dsComposicion.DataSet.FieldByName('qComponente')).NestedDataSet; end;
El resultado: Todo sigue igual que estaba y podemos ver los datos en las rejillas de datos (tanto en el dataset maestro como en los detalles) porque la existencia de cdsComposicion y cdsComponentes parece meramente anecdótica.
Podeis verlo por vosotros mismos si lo ejecutais.
Así que una de las primeras conclusiones o reflexiones al vuelo de estos comentarios es que nuestro dataset maestro (cdsArticulos) es el jefazo del grupo, nuestro hombre importante y el resto de detalles son tan solo una ventana a lo que se está cociendo en su interior. Son meros hombres de paja o si se prefiere, actores de relleno que hacen que el batallon de romanos tenga mas credibilidad. Lo cual no quiere decir para nada que se deban eliminar pues son una ayuda necesaria en la parte de diseño de nuestra desarrollo. Solo hablo de tomar conciencia de un detalle que nos puede pasar desapercibido, lo cual sí parece importante en el transfondo de la curiosidad que mueve este grupo de entradas.
La tercera parte tendrá que ver sobre el delta y de alguna forma, la reflexión casi cae por si misma, por su propio peso, si haceis cualquier modificación en uno de los registros, y tras el oportuno post, es pulsado el boton VerDelta. La asignación en:
procedure Tdatos.Verdelta; begin try Delta.Data := cdsArticulos.Delta; except Delta.Data := Null; end; end;
nos permitirá visualizar el esquema conceptual y fisico que usa nuestro proveedor de datos para generar las oportunas sentencias sql, es decir el registro de actualizaciones. Esa será nuestra tercera parada. Tambien de cuando en cuando hay que dormir… 🙂