none
ERROR 457 esta clave ya esta asociada a un elemento de esta colección RRS feed

  • Pregunta

  • Hola a todos! Mi nombre es Gonzalo, soy nuevo en el foro.
    Les comento que hace poco empece a trabajar en desarrollo en Visual Basic (mi primer experiencia en lo que respecta laboralmente) y por suerte lo vengo llevando bastante bien hasta que, como hoy, no puedo resolver un temita que me tiene bastante preocupado.

    El tema es el siguiente, en el sistema que tenemos, importamos un archivo txt para cargar ciertos datos, y es ahí donde surge el problema. Se que es por un valor duplicado, pero no tengo idea como resolverlo (nunca trabaje con colecciones), por eso acudo y suplico a uds..

    Les dejo la parte del codigo donde arroja el error (marcado con flechas) como asi tb adjunto el txt que tratamos de importar:

    If (intDeterminacionInicio > 0) And (intDeterminacionCantidad > 0) Then
    strDeterminacion = Trim(nonul(Mid(Fila_Archivo, intDeterminacionInicio, intDeterminacionCantidad)))
    Else
    strDeterminacion = Trim(nonul(Mid(Fila_Archivo, intDesde, intHasta - intDesde)))
    End If

    strDatos = stragr(strDatos, strDeterminacion, " - ")

    '''VALOR
    intDesde = intHasta + 1
    intHasta = fncHasta_Enter(Fila_Archivo, intDesde)
    If (intValorInicio > 0) And (intValorCantidad > 0) Then
    strValor = num(Mid(Fila_Archivo, intValorInicio, intValorCantidad))
    Else
    strValor = num(Mid(Fila_Archivo, intDesde, intHasta - intDesde))
    End If
    strDatos = stragr(strDatos, strValor, " - ")

    If Not ((strValor = "") _
    And (strDeterminacion = "") _
    And (strAnalisis = "") _
    And (strCodigo = "")) Then
    bolActualizar = True
    Else
    bolActualizar = False
    End If
    Else
    If (mIntTipoImportacionExportacion = 0) _
    And (mIntImportaExportaFormato = 1) Then
    If (InStr(1, UCase(Fila_Archivo), "DATE") <> 0) Then
    strFecha = Replace(Mid(Fila_Archivo, 6, 15), " ", "")
    strDatos = stragr(strDatos, strFecha, vbCrLf)
    ElseIf (InStr(1, UCase(Fila_Archivo), "PROTOCOLO") <> 0) Then
    If (intCodigoInicio > 0) And (intCodigoCantidad > 0) Then
    strCodigo = Trim(nonul(Mid(Fila_Archivo, intCodigoInicio, intCodigoCantidad)))
    Else
    strCodigo = num(Mid(Fila_Archivo, 11, 10), 0)
    End If
    strDatos = stragr(strDatos, strFecha, " - ")
    ElseIf (Trim(Fila_Archivo) <> "") Then
    intDesde = 1
    intHasta = fncHasta_Numero(Fila_Archivo, intDesde)
    If (intDeterminacionInicio > 0) And (intDeterminacionCantidad > 0) Then
    strDeterminacion = Trim(nonul(Mid(Fila_Archivo, intDeterminacionInicio, intDeterminacionCantidad)))
    Else
    strDeterminacion = Trim(nonul(Mid(Fila_Archivo, intDesde, intHasta - intDesde)))
    End If
    strDatos = stragr(strDatos, strDeterminacion, " - ")

    intDesde = intHasta
    intHasta = fncHasta_Enter(Fila_Archivo, intDesde)
    If (intValorInicio > 0) And (intValorCantidad > 0) Then
    strValor = num(Mid(Fila_Archivo, intValorInicio, intValorCantidad))
    Else
    strValor = num(Mid(Fila_Archivo, intDesde, intHasta - intDesde), 0)
    End If
    strDatos = stragr(strDatos, strValor, " - ")

    mColDeterminaciones.Add strDeterminacion
    --------------->>>>>> mColDeterminacionesValores.Add strValor, Key:=strDeterminacion <<<<<<<<<<<<<<<<<<<--------------------------------------------------------------------------->>>>> ACA DA EL ERROR

    End If
    Else
    If (mIntTipoImportacionExportacion = 0) Then
    intDesde = 1
    intHasta = fncHasta_Enter(Fila_Archivo, 1)
    Else
    strFecha = Mid(Fila_Archivo, 1, 10)

    intDesde = 12
    intHasta = fncHasta_Enter(Fila_Archivo, 12)
    End If
    If (intCodigoInicio > 0) And (intCodigoCantidad > 0) Then
    strCodigo = Trim(nonul(Replace(Replace(Mid(Fila_Archivo, intCodigoInicio, intCodigoCantidad), "M", ""), "H", "")))
    Else
    strCodigo = Trim(nonul(Replace(Replace(Mid(Fila_Archivo, intDesde, intHasta - intDesde), "M", ""), "H", "")))
    End If
    If (mIntTipoImportacionExportacion = 1) Then
    If (strCodigo = "ORI") Then
    intDesde = intHasta + 1
    intHasta = fncHasta_Enter(Fila_Archivo, intDesde)
    strCodigo = Trim(nonul(Replace(Replace(Mid(Fila_Archivo, intDesde, intHasta - intDesde), "M", ""), "H", "")))
    End If
    Else
    If Not (IsNumeric(strCodigo)) Then lngIdProtocolo = 0
    End If


    El error se da porque encuentra valores repetidos en el txt que quiero importar, y es esto lo que no puedo resolver, porque como decía antes, es la primera vez que veo algo de colecciones y si bien lei un monton, llevarlo a la practica no es sencillo (por lo menos para mi).

    Si ven el txt, la primer columna tiene valores que se repiten, carga la primera vez y ya la segunda me da el error:

    ------------------->>> strValor = 19080161 <<<-------------------

    ESTOS SON LOS PRIMEROS DATOS DEL TXT:

    19080161 CREA-BI SER 7.899 mg/L
    19080161 CHOLESTEROL SER 2.4161 g/L
    19080161 TGwiener SER 1.4539 g/L
    19080162 CREA-BI SER 10.7413 mg/L
    19080162 UREAUV SER 0.4171 g/L
    19080164 CREA-BI SER 7.6773 mg/L
    19080164 UREAUV SER 0.3849 g/L
    19080164 CHOLESTEROL SER 1.8642 g/L
    19080164 TGwiener SER 0.7105 g/L

    jueves, 5 de septiembre de 2019 15:52

Todas las respuestas

  • El problema lo tienes en el valor que usas como clave para la colección.

    La clave, si la usas, tiene que ser única por lo que no te va a valer ese código inicial que se repite en distintas líneas.
    Yo te propondría no usar la clave o usar como valor de la clave el número de línea.


    Saludos, Javier J

    viernes, 6 de septiembre de 2019 9:23
  • El problema lo tienes en el valor que usas como clave para la colección.

    La clave, si la usas, tiene que ser única por lo que no te va a valer ese código inicial que se repite en distintas líneas.
    Yo te propondría no usar la clave o usar como valor de la clave el número de línea.


    Saludos, Javier J

    Hola Javier, muchas gracias por la respuesta!!

    El tema es que nunca trabaje con colecciones y este código ya estaba escrito desde antes que yo empiece a trabajar con el..

    Si no es mucha molestia, podrías indicarme algún ejemplo o como hacer lo que me decís?

    Te agradezco mucho!

    mColDeterminaciones.Add strDeterminacion
    mColDeterminacionesValores.Add strValor, Key:=strDeterminacion


    viernes, 6 de septiembre de 2019 19:07
  • Puedes añadir el elemento sin clave de esta forma:

    mColDeterminaciones.Add strDeterminacion
    mColDeterminacionesValores.Add strValor


    Saludos, Javier J

    lunes, 9 de septiembre de 2019 6:22