FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
SQL Server 2005 Express y las transacciones anidadas
Hola a todos en el foro.
Si no es la primera vez que escribo, probablemente sea la segunda y es para pediros ayuda... Tengo dos bases de datos creadas dentro de un servidor MS SQL server 2005 Express. Tanto en la base de datos A como en la B existen las mismas tablas. La base de datos A es para los "dato de trabajo" y la base de datos B es para hacer las labores de "Histórico". Lo que quiero implementar es el traspaso de información de la base de datos A a la base de datos B. Más específicamente, mover un registro de la base de datos A a la B. Esto lo llevaría a cabo copiando el contenido de un registro de la tabla T1 de la base de datos A a la tabla T1 de la base de datos B y a continuación eliminando dicho registro de la tabla T1 de la base de datos A. Además, para mí es muy importante hacerlo dentro de transacciones para asegurarme que si falla el copiado no ejecute el borrado, o que si falla el borrado que deshaga el copiado. dbHistorico y dbDatos son dos TADOConnection El trozo de código es el siguiente... Código:
cSentenciaHistorico := 'INSERT INTO T1 (campo) values ('valor'); //Comienzo la primera transacción que controla la inserción del registro en el histórico. dbHistorico.BeginTrans; try dbHistorico.Execute(cSentenciaHistorico); // Comienza la segunda transaccion (anidada) que controla el borrado del registro en la base de datos "de diario". dbDatos.BeginTrans; try cSentenciaDatos := 'DELETE ' + cTabla + ' WHERE ' + cClave + ' = ' + TSQL.FieldByName( cClave ).AsString + ';'; dbDatos.Execute(cSentenciaDatos); // si todo ha ido bien, hago un commit de las dos transacciones. dbDatos.CommitTrans; dbHistorico.CommitTrans; except // si falló el borrado, lo anulo. dbDatos.RollbackTrans; // reactivo la excepción para que también se deshaga la insercion. raise; end; except // si algo fué mal, que se deshaga el insert.. dbHistorico.RollbackTrans; end; No soy capaz de hayar una solución. ¿Vosotros veis si me estoy equivocando en algo? ¿Se os ocurre alguna otra forma de mover los registros de una db a otra de forma segura? Perdonad por el tocho, pero es que no me sé explicar mejor. Muchas gracias por adelantado. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Delphi 7 + SQL Server 2005 Express | lsedr | Conexión con bases de datos | 6 | 19-08-2011 22:14:45 |
¡¡¡Ayuda con sql server express 2005!!! | manrock44 | SQL | 6 | 02-09-2010 16:33:34 |
Sql Server Express 2005 | dvlt | SQL | 1 | 10-03-2008 14:51:05 |
SQL Server 2005 Express | Iceman | MS SQL Server | 2 | 04-12-2006 23:19:57 |
Sql Server Express 2005 problemas... | Nelson Polanco | MS SQL Server | 2 | 08-05-2006 23:57:58 |
|