insertar registro en una tabla detalle cuando otra general no tiene datos aun
Hola nuevamente:
a ver si logro explicarme: Tengo dos tablas: TAGENDA TRECORDAR ID_AGENDA-----------------| ID_RECORDAR ID_EMPLEADO ------------------ID_AGENDA FECHA DETALLE_ARECORDAR ESTADO MOSTRAR DESDE // En teoria para mandar fecha en la cual empiece a avisar FECHA HORA La idea es que en la aplicaciones pueden haber varios empleados utilizando el programa pero cada uno con agenda diferente al loguearse. Pero no se me ilumina como crear la sentencia sql para agregar datos a la TAGENDA y relacionarla con la TRECORDAR Alguna ayudita.. Saludos novato_erick |
Hola
:confused: Saludos |
En relaciones de uno-a-muchos, es la regla PRIMERO insertas datos en la relacion "uno" y DESPUES en la relacion "muchos".
Esto es la base de la integridad relacional. |
Cita:
en mi tabla TAGENDA aun no se ha generado un ID_AGENDA, la pregunta es como podría obtener el id de mi agenda para ser otorgado a mi TRECORDAR Aqui esta nuevamente: Código:
TAGENDA TRECORDAR Saludos novato_erick |
hola
no se mucho de SQL, pero una via seria que a la hora de crear el usuario cree tambien el registro en la tabla TAGENDA. Y despues a medidas que vallas introduciendo los datos de detalles de la agenda vas ingresando registro en TRecordar relacionado con la Agenda, no se si me he sabido explicar y si es lo que quieres lograr. |
Cita:
En una relacion, no veo como se pueda usar un dato que aun no esta generado. |
Hola novato_erick.
Segun entiendo necesitas asignale de forma tentativa el ID de la tabla AGENDA a la tabla RECORDAR ya que le ingresas datos cuando aún no tenes guardado el registro correspondiente de AGENDA. También supongo que deseas que al abortar la operación de ingreso, en el punto que sea, quede deshecha la operación tanto para RECORDAR como para AGENDA. Si no me equivoqué en la apreciación, existen varias soluciones las cuales dependen de la BD usada y de los componentes con que te conectas. En principio una solución es el uso de CachedUpdates. En este enlace, se habla del tema de forma más o menos directa: ¿como obtener id del registro recien insertado? Saludos. |
Hola qué tal.
A ver si comprendo, si estás manejando tablas y los datos de éstas vienen del servidor y la relación se establece en tu sistema, con CacheUpdates, ApplyUpdates, CancelUpdates y RevertRecord lo controlas y dejas que el servidor controle qué usuario actualizó primero el registro. También depende el tipo de sistema que estés desarrollando si es web te recomendaría asignar ID's temporales y cuando confirmen los datos entonces cambias la clave por una definitiva. Si es cliente servidor, lo que a mí me ha funcionado es usar TQuery y TClientDataSet para cosas indefinidas (como es tu caso), con eso tienes el control de "todo" lo que mandes a tu DB. Si es multiusuario..., QUE VALIENTE!!!, yo ocuparía todo lo anterior y un lote de aspirinas. ;) Saludos. Eduardo Laguna |
Gracias eficsa y elaguna, de ambas parte creo que encontré la solución:
Mi DB es en Firebird, los componente son de DBExpress, y la aplicacion es multiusuario Cliente Servidor.... Asi que me tome ya la Panadol ExtraFuerte.... :D En firebird realice lo siguiente:
En un TSQLQuery llamado qCapturaId en la propiedad String hice esto:
En el ClientDataSet utilice estos Eventos: AfterApplyUpdate En el Evento AgendaNewRecord
En el Evento ReconcileError
En el evento OnShow de mi formulario pido que me abra el ClientDataSet y lo ponga en modo Insert, Así que simplemente capturo el id que me me genero Firebird lo inserto en mi tabla agenda y mi tabla Recordar. Bueno me funciono, ahora estoy haciendo las prueba con multiples usuarios y me ah trabajado bien... |
Qué bien si ya lo tienes controlado.
Lo de que es multiusuario y Cliente-servidor a la vez, creo que mejor deberías de dejarle todo al servidor. Saludos. |
Yo no uso FB, mas bien MYSQL pero supongo que es el mismo principio ya que no conozco bien los generadores de FB. En MySQL usamos un campo autoincrementado para llevar el control de las claves del registro maestro de manera que un pseudocódigo sería esto:
Código:
Abrimos la transaccion; En FB supongo que el generador hace lo mismo que el campo autoincrementado, ahí los expertos nos dirán. |
Cita:
Trato de que mi ClientDataSet se abra para obtener mi id en el evento OnEnter pero si utiliza el usuario la tecla Tab no se abre... aun estoy viendo como hago eso... Gracias chicos Saludos |
La franja horaria es GMT +2. Ahora son las 12:53:46. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi