Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Debates
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
TDataSource - ¿Para qué existe?

Decidí colocar esta pregunta en el foro de debates ya que se trata más de una pregunta de concepto que de uso de una componente.

El caso es que estamos acostumbrados a utilizar componentes data-aware para acceder a bases de datos y mecanicamente colocamos un dataset de nuestro gusto, lo conectamos al correspondiente datasource y a éste conectamos las componentes data-aware.

Cada componente data-aware puede conectarse a un sólo datasource y cada datasurce puede conectarse a un solo dataset.

De manera que, ¿por qué las componentes data-aware no se conectan directamente al dataset? ¿Cuál es el papel esencial de este intermediario?

Cierto que puede esgrimirse por lo menos una razón de practicidad: si queremos cambiar el dataset asociado a un juego de componentes data-aware, en lugar de cambiar la hipotética propiedad dataset de cada componente basta cambiar la propiedad DataSet del DataSource.

Pero ¿es ésta la razón de fondo?

¿Qué piensan ustedes?

// Saludos
Responder Con Cita
  #2  
Antiguo 14-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Me parece que, aparte de lo ya mencionado, la mayor ventaja de tener un DataSource es la habilidad para habilitar/deshabilitar los controles asociados DataSet agrupandolos de la manera que te convenga.

Tenes un control bastante granular, puesto que podes tener varios datasources asociados a un solo dataset, dependiendo de la funcionalidad que busques. Y los diferentes controles db-aware asociados a uno u otro DataSource.

No se me ocurre ahora un ejemplo práctico, pero en el campo de batalla me he valido de esto mas de una vez.

Otra característica que me parece importante, en un diseño con Módulos de datos, es la capacidad de añadir ciertos eventos que se ejecuten globalmente para el datasource, sin tener que asociarlos a los eventos del dataset. Eventos como OnDataChange, OnStateChange y OnUpdateData, son ideales para llevar a cabo tareas típicas de la interacción con el usuario, sin dejar vínculos entre tu DataModule (capa de acceso/manejo de datos) y el FrontEnd.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 14-07-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Siempre tuve la idea que el TDataSource es el "comunicador" de los componentes visuales con un set de resultados. Digamos que los TDataSet funcionan simplemente como un set de resultados, y tienen toda la funcionalidad para filtrar, modificar pero carece de funcionalidad para ser utilizados contra controles que se actuelicen automáticamente... los TDataSource tienen la funcionalidad para que los componente dbaware se actualicen automáticamente cuando cambia los datos o el estado del DataSet.
Si quieres desarrollar una aplicación que consulta datos, pero sin interfaz gráfica, prescindes de los TDataSource´s

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 14-07-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por delphi.com.ar
Siempre tuve la idea que el TDataSource es el "comunicador" de los componentes visuales con un set de resultados. Digamos que los TDataSet funcionan simplemente como un set de resultados, y tienen toda la funcionalidad para filtrar, modificar pero carece de funcionalidad para ser utilizados contra controles que se actuelicen automáticamente... los TDataSource tienen la funcionalidad para que los componente dbaware se actualicen automáticamente cuando cambia los datos o el estado del DataSet.
Si quieres desarrollar una aplicación que consulta datos, pero sin interfaz gráfica, prescindes de los TDataSource´s

Saludos!
Eso que dices es cierto, pero debido a cuestiones diseño... Es decir, son consecuencias directas del diseño de clases de Delphi más que razones por si mismas...

Básicamente estoy con Juan Antonio, la mayor utilidad de un DataSource desde el punto de vista teórico es el mayor control sobre los controles, y los eventos que proporcionan, que permiten más versatilidad que si tuvieramos que asociarlos directamente a un DataSet. Por otra parte creo que a la práctica lo más interesante es lo que comenta roman de que

Cita:
Empezado por roman
si queremos cambiar el dataset asociado a un juego de componentes data-aware, en lugar de cambiar la hipotética propiedad dataset de cada componente basta cambiar la propiedad DataSet del DataSource.
La verdad es que por ejemplo en QuickReport, que prescinden de ellos, los echo de menos

Saludos!

Última edición por __marcsc fecha: 14-07-2004 a las 16:57:45.
Responder Con Cita
  #5  
Antiguo 14-07-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por marcsc
La verdad es que por ejemplo en QuickReport...
Porque no necesita reflejar los cambios en el momento!!!... solo requiere en un momento el DataSet que es cuando se arma el reporte!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 14-07-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por delphi.com.ar
Porque no necesita reflejar los cambios en el momento!!!... solo requiere en un momento el DataSet que es cuando se arma el reporte!
Sisi, solo intentaba relacionarlo con lo que decía roman de que es más práctico a la hora de hacer cambios, si en un report tienes que cambiar el origen de datos tienes más trabajo que si los reports tuvieran DataSource, ya que solo tendríamos que cambiar el DataSet en el DataSource y no en todos los componentes.

Saludos!
Responder Con Cita
  #7  
Antiguo 14-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hablando de QuickReporte, aunque es quizas algo retorcido al principio, además de lo ya mencionado, podria tener sentido "ocultar" datos de algun reporte simplemente desactivando un DataSource, no?

Algo como

Código Delphi [-]
  dsDatosGerenciales.Enabled := esGerente;
  dsCostos.Enabled := esContabilidad or esGerente;

Asi, en un hipotético reporte, asocias las columna [CostoUnitario] y [CostoReposicion] al DataSource dsCostos,
las columna [utilidadbruta], [CostoFinanciero] al datasource dsDatosGerenciales

y el resto de columnas al datasource dsDatos.

Tendrias casi gratuitamente informes mucho mas dinámicos...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:19:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi