Carles,
Entiendo que si al objeto columna le asignas valor verdadero (TRUE) a su propiedad Unique y lo añades a una tabla, se produce una excepción (Exception) al ingresar valores repetidos en dicha columna.
El manejo de esta excepción está relativamente bien, me explico, una de las reglas universales de un “buen programador” es el no dar por hecho las hipótesis con las cuales construimos nuestro código, ¿porque?, pues por el día de mañana esas hipótesis pueden no ser ciertas.
En el código expuesto tienes varios puntos críticos que son manejados por un solo bloque try, esto no está bien del todo ya que en el bloque catch los manejas a todos por igual.
Ejemplo,
En primera instancia abres un archivo, que pasa si la ruta no es correcta, genera un error.
Cuando generas las columnas no hay problema, puedes crear las columnas que quieras y el compilador nunca te lo impedirá, el problema es cuando intentas ingresar estas columnas a la tabla, pues si la columna que intentas ingresar tiene el mismo key que otra ya ingresada te dará error.
Y por último, si no se me escapa algo por ahí, es que al ingresar filas nuevas pueden ocurrir errores por el Key de la columna repetido (el que marcas con .Unique=True).
Bueno, independiente de como manejes cada uno de estos errores, entiendo que siempre deberá enviar este archivo con errores a una carpeta especial, y es aquí donde nace tu nuevo problema, ¿este archivo existe, se encuentra abierto, la carpeta de destino existe, tengo permiso para escribir en esta carpeta, etcétera?
En fin, si todo lo que escribí te da cáncer y solo deseas hacer que el archivo se mueva, te planteo el siguiente pseudocódigo:
IF(ARCHIVO.EXISTE)
{
IF(ARCHIVO.ABIERTO)
{
ARCHIVO.CERRAR
}
IF(RUTA_CAMBIO.EXISTE)
{
ARCHIVO.MOVER(RUTA_CAMBIO)
}
ELSE
{
MANEJO_DE_ERROR
}
}
ELSE
{
MANEJO_DE_ERROR
}
Saludos,
Pipe [hgjfkdls]