** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Pasar ruta a RecordSet
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoPasar ruta a RecordSet

 Responder Responder Página  12>
Autor
Mensaje
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Tema: Pasar ruta a RecordSet
    Enviado: 30/Agosto/2017 a las 18:48
Hola a todos, tengo un problema al querer pasar la ruta del archivo seleccionado con File Dialog al recordset.

Actualmente tomo el archivo de una ruta especifica pero ahora quiero hacerlo dinamicamente con File Dialog, pero no he podido pasar la ruta al recordset.

Este es el codigo:

Dim Fdcsv As FileDialog
       
     Dim strRutacsv As String
     Set Fdcsv = Application.FileDialog(msoFileDialogFilePicker)

     Dim vrtSelectedItemscsv As Variant

     With Fdcsv
       .Title = "Find: CSV Files Cross Reference"
       .ButtonName = "Import"
       .AllowMultiSelect = False
       .Filters.Clear
       .Filters.Add "CSV files", "*.csv*", 1
        If .Show = -1 Then
                         
        strRutacsv = .SelectedItems(1)
        
         Else

             DoCmd.Hourglass (False)
             MsgBox "You must select a file to import " & vbCrLf & "before proceeding", vbCritical, "Process canceled"
             Set Fdcsv = Nothing
            Exit Sub
            
        End If
   End With


    rst.CursorLocation = adUseClient 
    'rst.Open "SELECT Top 10 * FROM [Text;Database=C:\Users\xxxxxx\xxxx\xxxx\xxxxx].MiArchivo.csv;", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    rst.Open "SELECT Top 10 * FROM [Text;Database] & (strRutacsv), CurrentProject.Connection, adOpenStatic, adLockReadOnly"'Esta es la forma dinamica pero no me queda me marca error


Error: 3709 La conexión no se puede utilizar para realizar esta operación. Es cerrado o inválido este contexto

Que es lo que estoy haciendo mal?

Espero me puedan ayudar saludos.

DS
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11481
Enlace directo a este mensaje Enviado: 30/Agosto/2017 a las 19:55
J****, de ha borrado la respuesta en el momento de enviar. Repito resumidamente.

1. No recuerdo haber hecho nunca lo que tu haces así que me baso en tu código
2. Tu concatenación es incorrecta por hacerse "dentro" de una cadena de texto.
3. No respetas la sintaxis que te propone el sistema 
4. Te has "comido" un signo = 

Imaginemos que tenemos el fichero siempre en el mismo sitio y que se llama siempre igual (C:\Users\Documents\MiArchivo.csv). En ese caso el código sería:
"SELECT Top 10 * FROM [Text;Database=C:\Users\Documents].MiArchivo.csv;"

Imaginemos ahora que strRutacsv devuelve C:\Xavi\Pruebas\MiArchivo.csv

Según tu código, se convertiria en:
"SELECT Top 10 * FROM [Text;Database] & (strRutacsv), CurrentProject.Connection, adOpenStatic, adLockReadOnly"

Como puedes observar, en tu primera línea, el cierre de las comillas se produce justo despues de ;
En tu segunda línea se va al final.
¿Porque?
Pues porque no "extraes" la variable de la cadena ni la "preparas" como se espera.

1. Depura la cadena para que sustituya la ultima aparición de \ por ]. Utiliza las funciones de tratamiento de texto.
2. La nueva variable obtenida la "sacas" de la SQL. Y le añades el = que te has comido. 

Debería quedar algo así

"SELECT Top 10 * FROM [Text;Database=" & strNuevaRutacsv & ";", CurrentProject.Connection, adOpenStatic, adLockReadOnly

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 2877
Enlace directo a este mensaje Enviado: 30/Agosto/2017 a las 19:56
Hola.
Prueba con la siguiente modificación:

rst.Open "SELECT Top 10 * FROM [Text;Database]=" & strRutacsv & ", CurrentProject.Connection, adOpenStatic, adLockReadOnly"

Espero que ayude a resolver la duda.
Ya comentas.
Un saludo a todos

Edito: XAVI, Lo que me pasa por no comprobar al final que otro se ha adelantado a la respuesta y en este caso mucho mejor


Editado por prga - 30/Agosto/2017 a las 20:04
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 31/Agosto/2017 a las 00:52
Tengo un problema grave de sintaxis,

Comprendo lo explicado Xavi en los primeros 4 puntos he agregado el signo "=" y he cerrado la comilla exactamente despues de obtener el archivo, 

He cerrado el corchete antes del signo "=", pero no comprendi bien este punto:

1. Depura la cadena para que sustituya la ultima aparición de \ por ]. Utiliza las funciones de tratamiento de texto.
 

rst.Open "SELECT Top 10 * FROM [Text;Database]=" & strRutacsv & ";", CurrentProject.Connection, adOpenStatic, adLockReadOnly

Esta es la modificacion y ahora me arroja el error -2147217900 (0040e14) en la clausula FROM.

Cual seria ahora mi error?

DS
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11481
Enlace directo a este mensaje Enviado: 31/Agosto/2017 a las 12:40
Al final me ha tocado hacer una prueba para abrir un recordset sobre un CSV y vemos que la sintaxis es la que tu has puesto:
[Text;Database=C:\Users\xxxxxx\xxxx\xxxx\xxxxx].MiArchivo.csv

Imaginemos que la ruta es C:\Users\Public\MiArchivo.csv. Entonces esa línea seria
[Text;Database=C:\Users\Public].MiArchivo.csv

En ella vemos que el corchete se abre antes de Text y se cierra dónde iria la ultima Contrabarra (\)
En tu variable strRutacsv tendrias el valor C:\Users\Public\MiArchivo.csv dónde deberías sustituir la ultima contrabarra por el cierre del corchete, añadir un punto y el nombre del fichero

    strNuevaRuta= Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)

Eso lo concatenas correctamente y ya lo tienes

rst.Open "SELECT Top 10 * FROM [Text;Database=" & strNuevaRuta & ";", CurrentProject.Connection, adOpenStatic, adLockReadOnly


Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 01/Septiembre/2017 a las 23:28
Xavi, funciona muy bien tu propuesta solo que ahora intento ingresar los datos a la tabla y me da el error 3134 y no puedo insertar los registros lo que veo es que me falta un ";" al final del codigo pero lo agruegue y no me funciono.

Esta es la linea con el problema:

CurrentDb.Execute _
        "Insert Into & AquiMiTabla & (Plant, Wire, Cut, Customer, Plattform, Model, Suffix, Group, Seq, Status) " & _
        "Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='" & strRutacsv & "' Where F" & fld + 1 + 14 & "='X'"

Agregue el ";" &";" al final asi pero tampoco funciono.

Con un Debug.Print me arroja esto:

Insert Into & AquiMiTabla & (Plant, Wire, Cut, Customer, Plattform, Model, Suffix, Group, Seq, Status) Select '33208048', '1', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='C:\Users\xxxx\Desktop\xxxx\xxxxx\Archivo.csv' Where F28='X'


Ouch
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11481
Enlace directo a este mensaje Enviado: 01/Septiembre/2017 a las 23:57
Algo no haces bien. La ruta debe acabar asi:

xxx].Archivo.csv

Revisa el codigo
Xavi, un minyó de Terrassa

Mi web
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 02/Septiembre/2017 a las 08:42
Ouch  Soy un cabezon

"Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database=" & "]."; strRutacsv & Where & F; " & fld + 1 + 14 " & "='X'"

Insert Into & AquimiTabla& (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database=].F:\Libro1.csv & fld + 1 + 14 ='X'
 

Aun no me queda....
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11481
Enlace directo a este mensaje Enviado: 02/Septiembre/2017 a las 12:40
Te dejé una linea de código para convertir

C:\Users\Public\archivo.csv


C:\Users\Public].archivo.csv

que es lo que necesitas. La línea es esta:

strNuevaRuta= Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)


Xavi, un minyó de Terrassa

Mi web
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 28/Noviembre/2017 a las 16:48
strNuevaRuta (Seleccion de Archivo) me da esto:
C:\Users\XXXXX\Desktop].Archivo.csv

Y al querer introducir los datos (uso Debug.Print) me da esto:
Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='C:\Users\XXXXX\Desktop].Archivo.csv' Where & F15='X'

Ya termina la ruta como me lo indicabas en este comentario:

Publicado originalmente por xavi xavi escribió:

Algo no haces bien. La ruta debe acabar asi:

xxx].Archivo.csv

Revisa el codigo

Pero aun asi no me inserta los registros a mi tabla.

NOTA: Cambie el nombre de StrNuevaRuta en esta linea asi:

strNuevaRutas = Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)
 

Saludos

DS
 


Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
pitxiku Ver desplegable
Habitual
Habitual
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 97
Enlace directo a este mensaje Enviado: 28/Noviembre/2017 a las 20:00
Publicado originalmente por Dany Solis Dany Solis escribió:

Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='C:\Users\XXXXX\Desktop].Archivo.csv' Where & F15='X'

Sin entrar en profundidad, ese & sobra
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 29/Noviembre/2017 a las 00:13
Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='C:\Users\XXXXX\Desktop].Archivo.csv' Where F15='X'

Sigue marcando error en la SQL.




Editado por Dany Solis - 29/Noviembre/2017 a las 00:14
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11481
Enlace directo a este mensaje Enviado: 29/Noviembre/2017 a las 08:58
Para mi gusto sobran apostrofes en en el nombre del fichero.

Tu tienes:
...From [Text;Database='C:\Users\XXXXX\Desktop].Archivo.csv' Where...

Y yo creo que es:
...From [Text;Database=C:\Users\XXXXX\Desktop].Archivo.csv Where...

Prueba y nos cuentas

Xavi, un minyó de Terrassa

Mi web
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 29/Noviembre/2017 a las 17:29
Gracias Xavi,

Modifique los apostrofes ahora el error es este:

"El número de valores de consulta y campos de destino no son los mismos"

Tengo 10 columnas y 10 valores a ingresar, esto es lo que me arroja:

Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10, F4, F5 From [Text;Database=C:\Users\XXXXX\Desktop].Archivo.csv Where F15='X'

Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9763
Enlace directo a este mensaje Enviado: 29/Noviembre/2017 a las 18:02
Select '1', '', F1, F2, F3, F9, F11, F7, F8, F10, F4, F5

Eso en mi pueblo son 12  ....LOL
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable