FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Insertar en varias tablas...
Buenas
estoy trabajando con Delphi 6 y accedo a una base de datos SQLServer con un ADOQuery. Tengo que grabar unos datos en diferentes tablas: tengo una tabla con una cabezera y varias tablas de "lineas" vinculadas a la tabla de cabezeras (una cabezera se vincula a varias lineas). Primero inserto el registro de la cabezera, después abro un formulario para insertar las lineas, una a una. Si hubiera un error en el insertar alguna linea, o el proceso se cancelara, tendría que eliminar otra vez todos los registros insertados en el proceso para dejar las tablas limpias. Una faena bastante dura si contamos todas las lineas que puedo llegar a poner a la vez. Mi duda es sencilla: ¿Hay alguna forma de optimizar el proceso? es decir, alguna forma de decirle, uno a uno, los registros que tiene que grabar, pero si se cancela, que no guarde ninguno; o al contrario, grabar los registros uno a uno, pero que si se cancela los elimine todos automáticamente. Recuerdo una técnica que me explicaron, eran transacciones de Beatrive; servian para hacer, según lo que yo entendí, exactamente lo que yo necesito. Siento el rollo, y muchas gracias por adelantado. |
#2
|
|||
|
|||
claro que si, inicias una transaccion y si algo peta en el medio simplemente ejecutas un rollback y caso contrario haces commit. de cualquier modo te aclaro que eso que planteas es una chapuza desde el punto de vista que, claro como informaticos que somos partimos de la base de primero guardar la cabecera y luego el detalle cuando en la realidad sucede completamente al revés, piensa en lo que te acabo de escribir y verás más luz al final del camino.
un saludo. |
#3
|
||||
|
||||
Como veo que estas bastante novato en el tema, te recomiendo buscar ayuda sobre transacciones, que es una forma de convertir varias operaciones en una operación atómica, es decir o suceden todas o no sucede ninguna. Estas operaciones están soportadas en prácticamente todas las bases de datos y manejadores de archivos actuales, entre las pocas excepciones podemos contar a mySQL, que ha prometido, sin embargo, en su próxima versión, soportarlas.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
|||
|
|||
Con el tipo de tablas InnoDB tenemos transacciones y foreign keys :P
__________________
SIN FIRMA :P |
#5
|
|||
|
|||
Muchas gracias a todos!
He empezado a buscar información y a trabajar con las transacciones, y tienen muy buena pinta . Ahora bien, he estado haciendo algunas pruebas, ¿no puedo hacer consultas de las tablas afectadas antes de terminar la transferencia? Me interesaría mucho consultar los datos que voy insertando, y despues poderlos eliminar todos o grabarlos todos... Otra cosa, Cita:
gracias a todos de nuevo. |
#6
|
||||
|
||||
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
|