FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Key violation. Continuar con siguiente registro
Hola,
Estoy copiando datos de unas tablas a otras, en SQL Server usando ADO en Delphi 6. Como las tablas estan en distintas bases de datos, voy recoriendo los registros deseados y asignandoselos a los campos que quiero. Cuando se va a copiar un registro duplicado, trato la excepcion en el OnPostError, aviso de que registro se trata, hago un rollback y termino con un abort. Todo bien Mi pregunta es la siguiente. Hay algun modo de tratar la excepcion indicandole cual es el registro que no se ha podido copiar, pero no parar el programa y seguir con la copia del resto de registros? |
#2
|
||||
|
||||
En lugar de usar el OnPostError, puedes usar contro de excepciones
Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate |
#3
|
||||
|
||||
Hola chicolita!.
Cita:
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
||||
|
||||
Cita:
// Saludos |
#5
|
|||
|
|||
Creo que me he expresado un poco mal. Escribi el mensaje un poco deprisa.
En ese volcado de datos en teoria no tiene que haber ni un solo duplicado. Pero para eso existe el usuario, para crear duplicados y hacernos la vida mas dificil. Cuando detecto un error de clave duplicada, capturo la excepcion, hago un rollback para que cuando el error este corregido puedan empezar el proceso de nuevo, cierro las querys... y muestro en una ventana de dialogo cual es el registro que esta duplicado y termino con Abort, y como salta excepcion se para el proceso de volcado. Los usuarios han de revisar ese registro para no volcarlo, y volver a empezar el proceso Todo esto esta bien, y no hay ningun problema. Lo que quiero saber es si el volcado puede seguir haciendose automaticamente saltandose ese registro despues de indicar en la ventana de dialogo cual era. Que la excepcion se detectada y mostrada, pero NO INTERRUMPA la ejecucion del programa cbrrr, cuando digo que trato la excepcion en el OnPostError, evidentemente hago el try, except, que es lo mismo hacerlo alli que donde me indicaste. Personalmente prefiero ponerla alli para ir separando codigo y tenerlo separado por funciones pequeñas Última edición por CHiCoLiTa fecha: 19-06-2004 a las 14:04:57. |
#6
|
||||
|
||||
Para que el proceso siga normal podrias hacer algo como:
Sin hacer abort, ni rollback... de esa manera "matas" la excepción y continua normalmente el ciclo. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
|||
|
|||
El rollback lo hacia, porque si el proceso se para por clave duplicada y la ejecucion del programa termina, cuando vuelven a empezar todos los registros ya estarian duplicados porque los copio en la primera pasada.
Y el abort, para evitar que me muestre el mensaje de error, y mostrar el que yo quiera, no los 2 Al hacer lo que me comento jachguate, el programa sigue parando al encontrar un duplicado Este es el codigo que tengo puesto ahora mismo para hacer las pruebas con lo que me dijeron, por si veis algo anormal
QEasy es la tabla origen TCT_TOTAL es la talba destino Conexion con ADO y las 2 tablas estan en diferentes bases de datos, por eso no hago el insert De este modo es como copio los datos de una tabla a otra
Última edición por CHiCoLiTa fecha: 23-06-2004 a las 16:29:37. |
#9
|
||||
|
||||
Lo que quieren decir los compañeros es esto... y cárgate el OnPostError
__________________
E pur si muove |
#10
|
|||
|
|||
Pues si que soy duro de mollera Ya lo decia mi madre
No lo veia, y lo tenia hecho. Ahora que me has abierto los ojos marto, ya entiendo todo Al hacer yo mismo el try except, controlo directamente la excepcion, pero si lo hago en el OnPostError, el programa ya lo ha detenido haciendo directamente el raise. Es mas o menos correcto este razonamiento? Muchas a gracias a todos |
#11
|
||||
|
||||
Cita:
__________________
E pur si muove |
#12
|
|||
|
|||
Yo tengo un problema parecido, un mensaje de SQL de error al duplicar la llave primaria, sin embargo trato de cachar el error en el OnPostError y no me lo toma en cuenta , ayudenme!!!!
Última edición por Alejandro Ruiz fecha: 14-02-2007 a las 21:51:38. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|