![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola Foreros: Tengo una consulta que realizar:
Tengo en una base Firebird dos tablas que deseo actualizar en el mismo tiempo pero una debe agregar en un campo el ID de la otra que se genera automáticamente primero. El caso es el siguiente Una tabla que tiene la lista de personal, Id Legajo Apellido Nombre .... otra guarda las licencias Id IdAgente IdInasistencia // Aqui debo cargar el ID de la tabla de abajo Tipo Fecha .... y otra los días de inasistencia ID IdAgente Periodo FaltaJust FaltaInjust TardeJust TardeInjust ... esta ultima guardara tanto las licencias como las inasistencias justificadas o injustificadas) para calcular al año las veces que el empleado a faltado. Como procedimiento cuando le doy el guardar grabo primero la de inasistencias para que genere el ID (Lo cual lo hace perfectamente) pero no lo puedo tomar (da 0) para cargárselo como referencia a licencias. Espero ser lo bastante claro como para poder tener una solución.- Fragmento de codigo
Gracias ![]() |
#3
|
|||
|
|||
El ID de inasistencias no se ve y no le asigno valor porque es generado automáticamente por la base de datos. El tema es tomar ese valor que generó automaticamente para aplicarlo a Licencias. Es como si no se actualizara la tabla de inasistencias....
|
#4
|
||||
|
||||
Hola Martín!
Este tema se ha discutido muchas veces acá en el club. Lo que necesitas hacer es averiguar el último ID generado. Hay varias técnicas para hacer esto. Mi preferida es utilizar la clausula RETURNING de SQL. Lamentablemente ésta está disponible a partir de la versión 2.1 de Firebird. Si tienes una anterior no podrás utilizar el código que te proporcionaré a continuación:
Hay otra técnica que consiste en reservarse de antemano un código dado por el generador. Ese código luego lo utilizas en tu código al agregar nuevos registros. Ten en cuenta que esta técnica solo se aplica en el caso que no es necesario que la consecución de números IDs sea integra. Para obtener un valor de un generador utiliza la clausula GEN_ID de Firebird. Por ejemplo:
Saludos! |
#5
|
|||
|
|||
Hola Chris! Gracias por la respuesta.
Mas o menos he comprendido el tema. CodigoAgente funciona bien ya que es el id del agente que me devuelve una consulta SQL cuando busco a la persona y la selecciono Ahora bien como se aplicaría la clausula RETURNING dado que Dm.Inasistencias es un IBDataset??? ![]() |
#6
|
||||
|
||||
Cita:
Saludos, Chris |
#7
|
|||
|
|||
Gracias Chris!
Lo he solucionado con la segunda opcion sugerida por ti.
Solo modifique la sentencia dentro del paréntesis del SELECT a 0 porque si no me sumaba uno al que habia generado. Gracias nuevamente... ![]() Saludos !!! Martin |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Actualizar Campo Fecha Automaticamente | JUGUE | Firebird e Interbase | 3 | 30-09-2008 22:30:27 |
Tomar Valor de un campo a una variable | pmtzg | Conexión con bases de datos | 5 | 28-05-2008 20:39:03 |
Puedo tomar una frecuencia de audio y convertirla en un dato | Johnnywin | Varios | 5 | 29-09-2006 13:25:54 |
Como obtener el maximo numero generado en campo autonumerico | makinita | C++ Builder | 4 | 11-09-2006 11:14:50 |
¿Cómo puedo tomar la extensión de un archivo? | nuri | Varios | 5 | 21-07-2005 11:12:59 |
![]() |
|