Ir al contenido


Foto

Generador con TClientDataSet

generador generator clientdataset

  • Por favor identifícate para responder
4 respuestas en este tema

#1 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 23 agosto 2017 - 08:17

Tengo una base de datos (casi completa) hecha para Firebird, la cual contiene en varias tablas, generadores  para campos tipo ID.

Esto funciona de maravilla (como siempre), pero llevándolo a un "ambiente NTier" no "doy pie con bola" para hacer que el TClientDataSet conectado a un TDataSetProvider y por éste último a un TDataSet, pueda genera de manera automática el ID usando el generador de la base de datos.

 

Con más detalle:

Utilizo VCL y componentes de InterBase, para comunicarme con una base de datos de Firebird

 

Mis componentes son:

  1. TDBGrid
  2. TDataSource
  3. TClientDataSet
  4. TDataSetProvider
  5. TIBDataSet
  6. TDBNavigator

TIBDataset tiene en su propiedad GeneratorField,losl valores correspondientes.

La información se puede ver y controlar usando la grilla y el navegador.

 

Mi problema es que no puedo autogenerar desde el TClientDataSet el valor de clave correspondiente, cosa que se hace en la basse de datos.

 

:

 

Saludos

 


  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 23 agosto 2017 - 08:24

Lo único que se me ocurre desde mi triste posición ( 8o| ) es llamar al generador de forma explícita y pasarle el valor correspondiente al TClientDataSet en su campo correspondiente, pero eso no me parece una solución elegante, ya que anularía la función de la propiedad GeneratorField que los genios desarrolladores de esta biblioteca han puesto en el componente de TDataSet. Por lo que, imagino, algo debe haber que yo no sepa.

 

Saludos de nuevo ;)

(b)


Editado por cram, 23 agosto 2017 - 08:24 .

  • 0

#3 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 25 agosto 2017 - 06:26

Y bueno, me respondo yo mismo, pues ya lo solucioné.

Esto es una conversación privada entre yo y mí, así que si algún administrador quiere borrarla ta'güeno.

 

El asunto es que cuando usas TClientDataset y por medio de un TDatasetProvider lo conectas a un TDataSet que hace las operaciones de Select, Insert, Edit, Delete y Update, la propiedad GeneratorField no se utiliza, sino que se utiliza un procedure wrapper desde la base de datos para hacer una llamada al generador automatizado. En el lado del código Delphi, lo que se hace es no utilizar entonces, la propiedad y llamar al procedimiento en un evento como AfterInsert del componente TClientDataset, que es el que estará asociado a los Data Aware Controls, y de esta manera, pasar el valor generado en la base de datos como nuevo ID.

Al aplicar las actualizaciones, mediante ApplyUpdate o bien usando Post, luego de cada Insert o Edit, el campo Id estará puesto mediante el mecanismo del TDatasetProvider.

---

 

Desde el punto de vista de mi aplicación, no lo hice así, pues no era la funcionalidad que requería.

Lo hice separando el browsing del ABM y conectando el TClientDataSet al TDataSetProvider y éste último a un Query. Por otro lado al TDataset lo utilizo con todos sus "chiches", es decir con el uso de la propiedad GeneratorField.

 

(y)


  • 0

#4 tmsanchez

tmsanchez

    Advanced Member

  • Miembros
  • PipPipPip
  • 85 mensajes

Escrito 25 agosto 2017 - 07:03

Y bueno, me respondo yo mismo, pues ya lo solucioné.

Esto es una conversación privada entre yo y mí, así que si algún administrador quiere borrarla ta'güeno.

...

...

 

 

No te preocupes a todos nos pasa, especialmente a altas horas de la madrugada, es algo así como un "Teddy bear pair programming": http://blog.adrianbo...ir-programming/

 

Saludos y gracias por compartir la solución.


  • 0

#5 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 25 agosto 2017 - 07:24

Gracias tmSanchez, por responder. Leí el artículo (un 70% al menos).

El caso es que sí. Es eso. (y)

(b)


  • 0





Etiquetado también con una o más de estas palabras: generador, generator, clientdataset