none
Error al tratar de acceder a un archivo desde SSIS RRS feed

  • Pregunta

  • Hola, estoy tratando de pasar un flat file a una tabla y recibo el siguiente error :

    SSIS package "Reclamos_H.dtsx" starting.

    Information: 0x40043007 at Data Flow Task, SSIS.Pipeline: Pre-Execute phase is beginning.

    Information: 0x402090DC at Data Flow Task, Flat File Source [1]: The processing of file "C:\reclamos_h\H.05.09.2015.*.txt" has started.

    Warning: 0x8007007B at Data Flow Task, Flat File Source [1]: El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos.

    Error: 0xC020200E at Data Flow Task, Flat File Source [1]: Cannot open the datafile "C:\reclamos_h\H.05.09.2015.*.txt".

    Error: 0xC004701A at Data Flow Task, SSIS.Pipeline: component "Flat File Source" (1) failed the pre-execute phase and returned error code 0xC020200E.

    Task failed: Data Flow Task

    --

    Para construir el nombre del archivo utilice 2 variables: 

    @[User::FilePath_Reclamos]+ @[User::FileName]

    Intente dar full control al archivo pero no soluciono el problema. La carpeta esta en el disco C local.

    Me podrán ayudar ?

    Muchas gracias !!!

    martes, 8 de septiembre de 2015 22:51

Respuestas

  • Una vez que tus archivos están en un directorio, C:\reclamos_h en tu caso, lo que has de hacer es lo siguiente.

    Paso 1. Añadir una variable global a tu paquete que se llame NombreFichero,o como quieras, que sea de tipo string y que valga igual que la ruta completo de un archivo que esista. por ejemplo 'c:\reclamos\h.05.09.2015.0001.txt'

    Paso 2. añadir un foreach loop container en tu dataflow

    Paso 3. en la propiedad enumerartor de tu bucle foreach elegir foreach file enumerator poner ahí tu folder y tu especificación. por ejemplo *.txt

    Paso 4. ir a variable mapping y mapear la variable nombrefichero con el index 0

    Paso 5. Poner un dataflow dentro y en él poner un flat file connection source.

    Paso 6. En el connection manager del flat file connection poner en expresiones, el connection string como tu variable.

    De esta forma al iterar iremos uno tras otro por todos los ficheros que estén en el source.

    Ta´bien en la expresión del flatfilesource puedes tratar de construir con @[User::FilePath_Reclamos]+ @[User::FileName] manteniendo lo que ya tienes y quizá te funcione


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta Alejandra1977 lunes, 14 de septiembre de 2015 17:44
    lunes, 14 de septiembre de 2015 15:23
    Moderador

Todas las respuestas

  • Saludos,

    Me supongo que tu error es que quisiste hacer un filtro para todos los txt, porque veo el .*.txt y esto te causara el error.

    miércoles, 9 de septiembre de 2015 1:07
  • Hola! El tema es así : cargo una variable al principio del flow realizando: 

    select ..........

    ,'H.' || ltrim(rtrim(Reclamos_H)) || '.*.txt'  as FileName
    FROM DW_T_REL.DW_PARAMETERS;

    En Reclamos_H tengo una fecha : 06.09.2015

    Busco este archivo en un FTP y lo traigo a mi disco local y funciona, el archivo que me trae es :

    H.06.09.2015.003029

    Hasta aca SSIS interpreta el "*" 

    Ahora cuando quiero subir este archivo a una tabla me da el error de que no puede acceder al archivo como indique previamente.

    Alguna otra idea ? Muchas gracias !!!

    miércoles, 9 de septiembre de 2015 21:32
  • No sin más detalles, tu nombre trae ese .*., lo cual no deberia de ser un nombre valido en windows, podrias cambiarle y nombre a algo un poco más simple e intentar solo para descartar que no sean problemas de acceso.
    miércoles, 9 de septiembre de 2015 21:36
  • Lo raro es que trabajando con las variables,  ssis lo interpreta para bajarme a mi disco local el archivo : H.06.09.2015.003029  ( interpreta que el * es cualquier cosa despues de H.06.09.2015. pero no lo interpreta cuando con las mismas variables intento llamar a ese archivo y subirlo a una tabla.

    Que otro detalle estarías necesitando para ver si cierra mas el caso ? Avisame y te paso lo que necesites.

    Gracias !!!

    miércoles, 9 de septiembre de 2015 21:54
  • Lo raro es que trabajando con las variables,  ssis lo interpreta para bajarme a mi disco local el archivo : H.06.09.2015.003029  ( interpreta que el * es cualquier cosa despues de H.06.09.2015. pero no lo interpreta cuando con las mismas variables intento llamar a ese archivo y subirlo a una tabla.

    Que otro detalle estarías necesitando para ver si cierra mas el caso ? Avisame y te paso lo que necesites.

    Gracias !!!

    miércoles, 9 de septiembre de 2015 22:04
  • Una vez que tus archivos están en un directorio, C:\reclamos_h en tu caso, lo que has de hacer es lo siguiente.

    Paso 1. Añadir una variable global a tu paquete que se llame NombreFichero,o como quieras, que sea de tipo string y que valga igual que la ruta completo de un archivo que esista. por ejemplo 'c:\reclamos\h.05.09.2015.0001.txt'

    Paso 2. añadir un foreach loop container en tu dataflow

    Paso 3. en la propiedad enumerartor de tu bucle foreach elegir foreach file enumerator poner ahí tu folder y tu especificación. por ejemplo *.txt

    Paso 4. ir a variable mapping y mapear la variable nombrefichero con el index 0

    Paso 5. Poner un dataflow dentro y en él poner un flat file connection source.

    Paso 6. En el connection manager del flat file connection poner en expresiones, el connection string como tu variable.

    De esta forma al iterar iremos uno tras otro por todos los ficheros que estén en el source.

    Ta´bien en la expresión del flatfilesource puedes tratar de construir con @[User::FilePath_Reclamos]+ @[User::FileName] manteniendo lo que ya tienes y quizá te funcione


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta Alejandra1977 lunes, 14 de septiembre de 2015 17:44
    lunes, 14 de septiembre de 2015 15:23
    Moderador
  • Funciono perfecto!!!!! Muchas gracias !!!!
    lunes, 14 de septiembre de 2015 17:44