MartinS
11-01-2012, 15:10:15
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
if MessageDlg('¿Confirma el alta de la licencia?',mtConfirmation,mbYesNo,0) = mrYes then
Begin
Dm.Inasistencias.FieldByName('IDAgente').AsInteger := CodigoAgente;
Dm.Inasistencias.FieldByName('tipo').AsString := CTipo.Items.Strings[CTipo.ItemIndex];
Dm.Inasistencias.FieldByName('FaltaJust').AsInteger := StrToInt(DBEdit1.Text);
Dm.Inasistencias.FieldByName('Observaciones').AsString := DBEdit2.Text;
// Las tres lineas siguientes son a modo de desesperacion para ver si me da el bendito ID que genero
Dm.Inasistencias.Post;
Dm.Transaccion.CommitRetaining;
Dm.Inasistencias.Refresh;
ShowMessage(Dm.Inasistencias.FieldByName('Id').AsString); // muestra vacio
Dm.Licencia.FieldByName('IDAGENTE').AsInteger := CodigoAgente;
Dm.Licencia.FieldByName('IDInasistencia').AsInteger := Dm.Inasistencias.FieldByName('ID').AsInteger;
Dm.Licencia.FieldByName('Fecha').AsDateTime := Fsolic.DateTime;
Dm.Licencia.FieldByName('FDesde').AsDateTime := Fdesde.DateTime;
Dm.Licencia.FieldByName('FHAsta').AsDateTime := FHasta.DateTime;
Dm.Licencia.Post;
Dm.Transaccion.CommitRetaining;
end;
Gracias ;)
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
if MessageDlg('¿Confirma el alta de la licencia?',mtConfirmation,mbYesNo,0) = mrYes then
Begin
Dm.Inasistencias.FieldByName('IDAgente').AsInteger := CodigoAgente;
Dm.Inasistencias.FieldByName('tipo').AsString := CTipo.Items.Strings[CTipo.ItemIndex];
Dm.Inasistencias.FieldByName('FaltaJust').AsInteger := StrToInt(DBEdit1.Text);
Dm.Inasistencias.FieldByName('Observaciones').AsString := DBEdit2.Text;
// Las tres lineas siguientes son a modo de desesperacion para ver si me da el bendito ID que genero
Dm.Inasistencias.Post;
Dm.Transaccion.CommitRetaining;
Dm.Inasistencias.Refresh;
ShowMessage(Dm.Inasistencias.FieldByName('Id').AsString); // muestra vacio
Dm.Licencia.FieldByName('IDAGENTE').AsInteger := CodigoAgente;
Dm.Licencia.FieldByName('IDInasistencia').AsInteger := Dm.Inasistencias.FieldByName('ID').AsInteger;
Dm.Licencia.FieldByName('Fecha').AsDateTime := Fsolic.DateTime;
Dm.Licencia.FieldByName('FDesde').AsDateTime := Fdesde.DateTime;
Dm.Licencia.FieldByName('FHAsta').AsDateTime := FHasta.DateTime;
Dm.Licencia.Post;
Dm.Transaccion.CommitRetaining;
end;
Gracias ;)