Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Obtener un nuevo ID antes de cargar sus respectivos datos (https://www.clubdelphi.com/foros/showthread.php?t=74274)

Vales08 08-06-2011 22:11:01

Obtener un nuevo ID antes de cargar sus respectivos datos
 
Hola foro!!!
A lo mejor con mi titulo no fui muy explicativa y clara, pero no sabia como narrar muy breve mi inconveniente.. Por eso mismo aqui les explico..

UTILIZO:
*delphi 7
*Firebird
*sql manager 2008
*ibdataset, ibquery, ib transaction, ibdatabase, data source (Guardados en un Data Module)
Tengo que dar de alta un profesional con sus respectivos datos y las coberturas con las cuales este mismo trabaja.. A dichas cobertuas las saco de una tabla llamada CEBERTURAS_MEDICAS, a esto lo hago con dos grillas relacionadas, una conectada a la tabla COBERTURAS_MEDICAS y la otra grilla conectada a una tabla llamada COBER_PROF(relacion entre Profesionales y coberturas medicas NaN).. Para realizar esto yo necesito obtener el Id del profesional que etoy cargando para asignarles las coberturas en el proceso del alta.. Se entiende??
Entonces yo quiero saber como hago para que cuando ingreso al formulario para dar el alta, me guarde el ID y luego pueda seguir cargando los datos que faltan y las coberturas medicas, para luego guardar todo junto. (Menos el ID porque supuestamente ya estaria guardado).. Y obviamente esos datos que yo de de alta se asignen al ID guardado y que no se genere uno nuevo..

Espero puedan ayudarme, lo necesito.

Muchas gracias.-

ecfisa 08-06-2011 22:35:42

Hola Vales.

Si no te entiendo mál, interpreto que querés tener en la mano el ID del médico antes de comenzar a cargar las coberturas ya que después de ingresarlas aún te quedan datos del médico por ingresar.
Si es así, creo que podrías hacer un Append/Post sobre la tabla médicos al iniciar proceso de alta y luego poner la tabla en estado de edición (Edit) para continuar con la carga.
Si tenés campos requeridos, tendrás que asignarles algún valor por defecto (antes del Post), que luego se modificarán en el transcurso del ingreso.
Por otro lado si decidis abortar la operación con Rolback o RollbackRetaining, deshace el Post inicial.

Saludos.:)

Caral 08-06-2011 22:36:27

Hola
Seguro no entiendo bien.
Primero dices que se necesita obtener el ID del profesional, si esta en alguna tabla seria solo hacer una llamada sql a ese campo.
Pero.
Posteriormente dices que se guarde el ID y Luego los datos segun se vallan obteniendo, para eso se necesita hacer, segun entiendo un Update.
Saludos

Vales08 08-06-2011 22:42:43

Cita:

Empezado por Caral (Mensaje 403058)
Hola
Seguro no entiendo bien.
Primero dices que se necesita obtener el ID del profesional, si esta en alguna tabla seria solo hacer una llamada sql a ese campo.
Pero.
Posteriormente dices que se guarde el ID y Luego los datos segun se vallan obteniendo, para eso se necesita hacer, segun entiendo un Update.
Saludos


Precisamente por esa razon, explique bien despues que es lo que realmente queria.. Yo aclare que el titulo no era muy explicativo..

Muchas gracias por tu aporte..

Vales08 08-06-2011 22:47:24

Cita:

Empezado por ecfisa (Mensaje 403057)
Hola Vales.

Si no te entiendo mál, interpreto que querés tener en la mano el ID del médico antes de comenzar a cargar las coberturas ya que después de ingresarlas aún te quedan datos del médico por ingresar.
Si es así, creo que podrías hacer un Append/Post sobre la tabla médicos al iniciar proceso de alta y luego poner la tabla en estado de edición (Edit) para continuar con la carga.
Si tenés campos requeridos, tendrás que asignarles algún valor por defecto (antes del Post), que luego se modificarán en el transcurso del ingreso.
Por otro lado si decidis abortar la operación con Rolback o RollbackRetaining, el Post que realizaste deshace el Post inicial.

Saludos.:)


Hola ecfisa!!
Claro, eso es lo que quiero.. vos me habias ayudado con el tema de las grillas, que al seleccionar una cobertura por medio de un boton la pase a la otra grilla.. Yo primeramente guardaba todos los datos de un profesional que daba de alta, co un boton guardar/confirmar y luego a ese profesional le asignaba las coberturas, pero se me hacia muy engorroso porque tengo muchos botones y a la vez al terminar de cargar el profesional luego tengo que cargarle en otro formulario los horaios y demas cosas, entonces se complicaba un poco...
Ahora probare lo que me dijiste y te comento como me fue... Comento que en un momento pense alg parecido pero no sabia bien como hacer..

Gracias y saludos.-

Caral 08-06-2011 22:48:11

Hola
No solo el titulo:
Cita:

Empezado por Vales08 (Mensaje 403052)
.......
...Para realizar esto yo necesito obtener el Id del profesional que etoy cargando para asignarles las coberturas en el proceso del alta.. Se entiende??
........
.....me guarde el ID y luego pueda seguir cargando los datos que faltan .......

Saludos

Vales08 08-06-2011 22:53:36

Cita:

Empezado por Caral (Mensaje 403061)
Hola
No solo el titulo:

Saludos

Es que para asignar las coberturas, traidas de otra tabla, a un profesional que no existe aun, yo necesito obtenerlo primero (que exista), para poder trabajar con la coberturas, es por eso que necesito guardar el id (Antes de cargar todoooo) para obtener el id de ESE profesional y poder trabajar con las coberturas..

Caral 08-06-2011 23:28:32

Hola
Eso lo entiendo, lo que no entiendo es, cual es el problema?.
Si haces una llamada a esa tabla por sql te generara el id de ese profesional, si lo quieres mantener activo puedes colocar ese dato en una variable y usarla en donde la necesites.
una vez que tengas ese ID, lo demas es simplemente guardar los datos.
Eso es lo que entiendo.
Saludos

Vales08 08-06-2011 23:59:27

Ecfisa, al append/post lo realizo en el Onshow? (En el tbsheet del alta) xq lo realizo alli pero al poner el post me salta error:

Cita:

Project Project_tesis.exe raised exception class EInvalidOperation with message 'Cannot focus a disabled or invisible window'. Process stopped. Use Step or Run to continue.

Vales08 09-06-2011 00:16:10

Ya encontre el error tenia algunos campos por defecto Not Null y por eso me saltaba el error, me olvide de tener en cuenta tu ultimo consejo

Cita:

Si tenés campos requeridos, tendrás que asignarles algún valor por defecto (antes del Post), que luego se modificarán en el transcurso del ingreso.
Asi me quedo el codigo hecho en el OnShow del tabsheet Alta..
Código Delphi [-]
DM.DSET_prof.Append;
DM.DSET_profESTADO.Value:=0;
DM.DSET_prof.Post;
DM.Transaccion.CommitRetaining;
DM.DSET_prof.Edit;
ape_nom_prof_a.SetFocus;


Gracias por tu ayuda, me sirvio de mucho!! .-

ecfisa 09-06-2011 00:50:42

Hola Vales.

Recién entro, me alegra que lo hayas resuelto. :)

Saludos.

Vales08 09-06-2011 00:54:10

Cita:

Empezado por ecfisa (Mensaje 403083)
Hola Vales.

Llego tarde... pero me alegro que lo hayas resuelto. :)

Saludos.

Jaja gracias pero me surgio un pequeño problemilla del que no me habia dado cuenta..
Cada vez que paso a la solapa (tabsheet) Modificacion, en la base de datos me da de alta igual el id, y cada vez que cierro el formulario, tanto con la crux de la ventana, como del boton salir, igual me guarda el id.. Y eso no tiene q suseder porque no quiero registros en blancon guardaddos solo con los id..
Me entiendes??

ecfisa 09-06-2011 01:21:53

Hola Vales.

En ese caso podes utilizar CachedUpdates en las tablas relacionadas para evitar que los datos que guardaste del médico se consoliden si deciden
salir sin almacenar los cambios.

Al guardar, por ejemplo:
Código Delphi [-]
    if MessageDlg('¿Confirma la operación?',mtConfirmation,[mbYes,mbNo],0)= mrYes then
    begin
      DMDatos.tbCoberturas.DataSource:= nil;   (* desconectar Coberturas *)
      DMConect.IBDatabase.ApplyUpdates([tbMedicos,tbCoberturas]);  // Guardar datos en Cache
      DMDatos.tbCoberturas.DataSource:= dsMedicos; (* conectar Coberturas *)
      DMConect.IBTransaction.CommitRetaining;
    end
    else
      DMConect.IBTransaction.RollbackRetaining; // Cancelar
    Close; // Salir
De este modo, los cambios únicamente se guardarán sí las líneas que contienen ApplyUpdates / CommitRetaining se ejecutan.

Saludos.

Vales08 09-06-2011 01:43:51

Ahhh ok, pero igual yo hice un commitretaining en el onshow despues el post y por eso con el RollbackRetaining no hacia nada... Ahora lo saque y me funciona bien...

Espero no tener mas problemitas.. creo q esto fue lo ultimo..
Muchas gracias ecfisa!!


La franja horaria es GMT +2. Ahora son las 10:24:15.

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