Los foros del Guille

Si no encuentras respuesta, puedes buscar en el sitio del Guille

Google
 

Ya está a la venta Novedades de Visual Basic 9.0

Selecciona el foro y pulsa en mostrar:     Mostrar 
De tu interés (algunos de los avisos publicados)

29/mar/2006
Utiliza asuntos descriptivos así será más fácil saber de que trata tu duda y facilitarás la tarea de los que responden a los mensajes.
Gracias.

  Foro: .NET VB Cantidad:  Desde:   Hasta:    Aplicar   Responder 
Respuestas a: 57633 - Problema con las excepciones añadiendo datos a una tabla
IDAsuntoFechaNick 
57633 Problema con las excepciones añadiendo datos a una tabla03/06/14 13:54Carles_Parets   
Buenas a todos,
Estoy modificando un codigo que realizo otra persona y llevo dias rompiendome la cabeza y sin poder solucionar el problema.
Resulta que obtengo de un archivo de texto los datos que me genera una maquina y los envio a una tabla que me he creado, añadiendo a traves de un reader cada uno de ellos, para ello utilizo las instrucciones (Try,Catch,Finally,Try End).
El problema surge cuando estoy realizando la gestion de añadido de datos en cada fila (mediante While...End While) y me encuentro con datos repetidos, que obligatoriamente necesito gestionar, y que al crear las columnas ya he parametrizado como unicas.


Try

            miReader = File.OpenText(RutaCompletaArchivo)

            Me.tCodiRack.Text = miReader.ReadLine()
            Me.tCodiRack.Text.Trim()
            CodiRack = Me.tCodiRack.Text

            POSICION = New DataColumn("POS")
            With POSICION
                .DataType = System.Type.GetType("System.String")
                .DefaultValue = "POS"
                .Unique = True
            End With
            MiTabla.Columns.Add(POSICION)

            CODIGO = New DataColumn("CODIGO")
            With CODIGO
                .DataType = System.Type.GetType("System.String")
                .DefaultValue = "CODIGO"
                .Unique = True
            End With
            MiTabla.Columns.Add(CODIGO)
            MiTabla.Columns.Add(New DataColumn("??"))

            WhereCodigoDeCrioTubo = ""
            CodisOrdenats096 = ""
            CodiCriotuboOK = ""
            AlgunaAnomalia = ""


            While miReader.Peek() <> -1
                fieldValues = miReader.ReadLine().Split(Separador)
                MiFila = MiTabla.NewRow
                If
                     tEscanerPalabrasKO.Text.Contains(fieldValues(1).ToString) Then
                    AlgunaAnomalia &= fieldValues(1).ToString & " - "
                    WhereCodigoDeCrioTubo &= "CodigoDeCriotubo =
                         '" & fieldValues(1).ToString & "' OR "
                    CodisOrdenats096 &= fieldValues(1).ToString & "-"
                End If
                For i = 0 To fieldValues.Length() - 1
                    MiFila.Item(i) = fieldValues(i).ToString
                Next

                MiTabla.Rows.Add(MiFila)
            End While
            miReader.Close()


        Catch ex As Exception
            CodiRepetit = True
            Dim mensaje As String
            mensaje = "Ha ocurrido el siguiente error al
                 importar el archivo: " + ex.ToString
            MessageBox.Show(mensaje)
            Return New DataTable("Empty")
        Finally
En ese momento de me genera la excepcion de que existen datos repetidos, que hace correctamente, pero en la siguiente rutina donde muevo el archivo .TXT, a una carpeta llamada con errores, no me permite realizar esta accion, ya que el archivo se encuentra todavia utilizado en el bucle donde añado los datos.

My.Computer.FileSystem.MoveFile(tPath.Text & "\" & lEscaneados.Items(0).ToString, tPath.Text & "\con_errores\" & lEscaneados.Items(0).ToString)

Si alguien me pudiera orientar que puedo realizar para evitar todo esto.

Gracias.

[Editado: Carles_Parets, 03/06/2014 13:55:32]
[Carles_Parets, 03/06/2014 14:00:25]
[Carles_Parets, 03/06/2014 14:03:53]
IDAsuntoFechaNick 
57634 Re: Problema con las excepciones añadiendo datos a una tabla (Resp: 57633)03/06/14 21:50Pipe[hgjfkdls]   
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]


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.
IDAsuntoFechaNick 
57635 Re: Problema con las excepciones añadiendo datos a una tabla (Resp: 57634)04/06/14 06:50Carles_Parets   
Gracias Pipe[hgjfkdls],
Al final lo he solucionado, gracias en parte a tus puntualizaciones, como decia el codigo lo realizo otro persona, yo soy el que esta modificandolo y controlandolo creando las excepciones en los puntos criticos como dijiste, me ha llevado a la solucion del problema, sin tener que utilizar el pseudocodigo.

Muchas gracias.


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.

 
(c) Guillermo 'guille' Som, 2005-2017  - foros.elGuille v1.0.5.3 (23/Mar/2009 14:50 GMT +1)  - (ASP.NET 2.0 v2.0.50727.8762)
 
Usuarios activos: 43 - App. iniciada: 23/09/2017 5:26:12 GMT - La hora GMT del servidor es: 23/09/2017 12:41:30 GMT