La Web del Programador: Comunidad de Programadores
 
    Pregunta:  61921 - INSERCIÓN DE REGISTROS EN UN DBGRID
Autor:  Oscar Marín
Hola a todos!
Soy nuevo en estos foros y quisiera que alguién muy amable y capacitado en Delphi 7 me pueda colaborar.
Tengo un inconveniente cuando intento realizar una inserción a una DBGrid a partir de otras dos que son como mis filtros. Exactamente intento que cuando yo seleccione un registro dando clic en una fila de mi DBGrid1 (son talleres) y de otra en un DBGrid2 (usuarios) que actúan como parámetros, en la DBGrid3 se realice una inserción del taller que yo he seleccionado en el DBGrid1 asignar el "taller" del DBGrid2 al "usuario" en el DBGrid3, cuando yo de clic en un Button; y a su vez pueda deshacer un registro ingresado, es decir, hacer un DELETE a la tabla donde he ingresado el registro.

Estoy trabajando con BD en MySQl a través de los componentes de Zeos. Para ello uso: ZConnection, ZTable, TDataSource y ZQuery.

Muchas gracias de antemano.

  Respuesta:  Luis Felipe García Gutiérrez
lo que debes hacer en las opciones del DBGrid cambiar a True la propiedad dgRowSelect, y por cógigo verificar que se hagan las selecciones en los 2 BDGrid (talleres y usuarios); ésto se hace por código con la propiedad BDGrid.SelectedField.AsString es importante tener en cuenta que éste devuelve el primer dato del registro seleccionado y el String se debe cambiar por el tipo de dato que corresponda. Una vez verificadas la selecciones en ambos BDGrid, se efectúa el Insert en la tabla donde se almacenan las asignaciones y se ejecuta los Delete de las tablas Taller y Usuario; por último se actualizan las consultas que actualizan los BDGrid a los datos resultantes de la operación.

Suerte!!

  Respuesta:  Luis Felipe García Gutiérrez
La verdad mi experiencia en programación la tengo sobre Delphi 5, pero la lógica es la misma; además, los componentes trabajan básicamente de igual forma.

Lo que debes hacer es usar una propiedad del DBGrid que permite seleccionar un el primer dato del registro (.SelectedField.AsInteger), dependiendo del tipo del dato cambias el Integer por String o lo que aplique para el caso; previamente entre las opciones del DBGrid se debe cambiar la propiedad drRowSelected a true; y debes tener la precaución que el dato que toma el .SelectedField. es el PRIMERO del registro.

Luego de hacer ésto pensaríamos que debe haber un botón de asignación el cual antes de ejecutar los Query de Insert y Delete, debe verificar que se hayan hecho las respectivas selecciones en los DBGrid de Talleres y Usuarios, si éstas son satisfactorias, entonces hacer el Insert en una tabla adicional donde reposan todos los datos de las asignaciones a partir de la selección, eliminar los datos de las selecciones de los dos primeros DBGrid y por último refresacar todos los DBGrid, afin de mostrar la información actualizada.

Espero haber aclarado la duda, suerte!!!