** 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 Enviado: 29/Noviembre/2017 a las 19:08
haha cierto,

Ahora me faltan:

Muy pocos parámetros Esperado 9

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'


Editado por Dany Solis - 29/Noviembre/2017 a las 19:09
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 19:10
Pues ahora yo cuento 10 en cada lado ....

¿Existen todos los campos? ¿Incluyendo el F15?


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
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: 29/Noviembre/2017 a las 20:17
Abre el diseñador de consultas de Access, y no agregues ninguna tabla. Ponlo en vista SQL, y copia y pega la SQL e intenta abrir/ejecutarla. Te dará más pistas acerca del error.
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 21:19
Todos los campos existen, son columnas fijas. Aparir de la columna F15 en adelante es variable la cantidad de columnas a existir.

El archivo es un tipo CrossReference, como la imagen de abajo:

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'
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 F16='X'
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 F17='X'
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 F18='X'
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 F19='X'
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 F20='X'
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 F21='X'
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 F22='X'
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 F23='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 22:56
Pues aparte de lo que te ha dicho pitxiku, yo probaría a poner un solo campo e iría añadiéndolos de uno en uno según fueran funcionando (método benedictino se llama a esto LOL)

Insert Into MiTabla (C1) Select '1' From [Text;Database=C:\Users\XXXXX\Desktop].Archivo.csv Where F15='X'
Insert Into MiTabla (C1, C2) Select '1', '' From [Text;Database=C:\Users\XXXXX\Desktop].Archivo.csv Where F15='X'
..
..
..





Editado por Mihura - 29/Noviembre/2017 a las 22:56
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
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: 30/Noviembre/2017 a las 16:21
Este es la linea SQL, creo solo les estaba compartiendo el resultado de la ejecucion de la misma.

Debug.Print _
        "Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) " & _
        "Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database=" & strNuevaRutas & " Where F" & fld + 1 + 14 & "='X'"
    Next

Voy a probar el metodo benedictino a ver que resultados obtengo, lo de copiar y pegar la SQL aun no lo he probado vamos a ver que nos da.


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

Dany Solis
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: 30/Noviembre/2017 a las 19:51
Intente hacer lo que me indican pero aun asi me aparece el error:

Muy pocos parametros se esperaban 2.

Compare el codigo original sacado de este mismo foro, tomando el archivo de una ruta especifica:

Original:

'En una matriz, colocamos los ordinales de los campos 15 a fin
    ReDim flds(rst.Fields.Count - 1 - 14)
    For fld = 0 To UBound(flds)
        flds(fld) = fld + 14
    Next
    rst.Move 8 'Nos situamos en la fila 9
    tbl = rst.GetRows(2, , flds) 'Cargamos en la matriz los datos de las filas 9 y 10 de los campos 15 a fin
    rst.Close
    For fld = 0 To UBound(tbl, 1)
        Debug.Print _
        "Insert Into & MiTabla & (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) " & _
        "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 " & MyTable & " rest of code"
    Next

Modificado:

'En una matriz, colocamos los ordinales de los campos 15 a fin
    ReDim flds(rst.Fields.Count - 1 - 14)
    For fld = 0 To UBound(flds)
        flds(fld) = fld + 14
    Next
    rst.Move 8 'Nos situamos en la fila 9
    tbl = rst.GetRows(2, , flds) 'Cargamos en la matriz los datos de las filas 9 y 10 de los campos 15 a fin
    rst.Close
    For fld = 0 To UBound(tbl, 1)
    
    strNuevaRutas = Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)
        
        'CurrentDb.Execute
        Debug.Print _
        "Insert Into MiTabla (C1,C2,C3) " & _
        "Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1 From [Text;Database=" & strNuevaRutas & " Where F" & fld + 1 + 14 & "='X'"
   
    Next

Esto me arroja el codigo Original...... Lo marcado en negritas es el contenido de la columna 15
Insert Into & MiTabla & (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) Select '7488', '1', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database='C:\Users\XXXXX\Desktop\2017\Marzo\Libro1.csv' Where F15='X'

Y aqui no me toma ese dato lo pasa vacio......
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'
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/Noviembre/2017 a las 20:02
Primero indicar que el error original ha "mutado" en otro error. Así ya somos capaces de generar una cadena de texto que la SQL entiende.

Ahora el problema es que los campos no coinciden. Me parece que la clave es la imagen que has puesto.

Los datos no empiezan en la primera fila por lo que es posible (que alguien me corrija si me equivoco) que esa sea la causa por lo que no funciona.

En cualquier caso, vista la imagen, yo lo habría planteado por automatización:
- abrimos fichero utilizando instancia de Excel
- abrimos recordset de destino
- nos posicionamos el la fila adecuada
- Addnew al recordset
- empezamos a rellenar los campos
- salvado
- nueva línea (mientras existan datos)

Un saludo
Xavi, un minyó de Terrassa

Mi web
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: 30/Noviembre/2017 a las 20:25
En ese código hay un Recordset. ¿No estarás abriendo el csv ahí también?
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: 30/Noviembre/2017 a las 21:34
Umm no solos usa SQL y un Schema.ini Puro...

Original del Maestro Raipon:

Sub Import()

Dim rst As New ADODB.Recordset
Dim tbl() As Variant
Dim fld As Integer
Dim flds() As Variant
    
    rst.CursorLocation = adUseClient
    rst.Open "SELECT Top 10 * FROM [Text;Database=C:\Users\rz9c0s\Desktop\2017\Marzo].Libro1.csv;", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    'En una matriz, colocamos los ordinales de los campos 15 a fin
    ReDim flds(rst.Fields.Count - 1 - 14)
    For fld = 0 To UBound(flds)
        flds(fld) = fld + 14
    Next
    rst.Move 8 'Nos situamos en la fila 9
    tbl = rst.GetRows(2, , flds) 'Cargamos en la matriz los datos de las filas 9 y 10 de los campos 15 a fin
    rst.Close
    For fld = 0 To UBound(tbl, 1)
        CurrentDb.Execute _
        "Insert Into MiTabla (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10) " & _
        "Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1, F2, F3, F9, F11, F7, F8, F10 From [Text;Database=C:\Users\XXXXX\Desktop\2017\Marzo].Archivo.csv Where F" & fld + 1 + 14 & "='X'"
    Next
    
End Sub


Modificado (FileDialog)

Sub Importas()

Dim rst As New ADODB.Recordset
Dim tbl() As Variant
Dim fld As Integer
Dim flds() As Variant
Dim Ruta As String
    
    
Dim Filename As String
Dim fs As Object

Set fs = CreateObject("scripting.filesystemobject")

     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)
        
        rst.CursorLocation = adUseClient
    
    strNuevaRuta = Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)
    
    rst.Open "SELECT Top 10 * FROM [Text;Database=" & strNuevaRuta & ";", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    Debug.Print strNuevaRuta
    'En una matriz, colocamos los ordinales de los campos 15 a fin
    ReDim flds(rst.Fields.Count - 1 - 14)
    For fld = 0 To UBound(flds)
        flds(fld) = fld + 14
    Next
    rst.Move 8 'Nos situamos en la fila 9
    tbl = rst.GetRows(2, , flds) 'Cargamos en la matriz los datos de las filas 9 y 10 de los campos 15 a fin
    rst.Close
    For fld = 0 To UBound(tbl, 1)
    
    strNuevaRutas = Left(strRutacsv, InStrRev(strRutacsv, "\") - 1) & "]." & Mid(strRutacsv, InStrRev(strRutacsv, "\") + 1)
        
        'CurrentDb.Execute
        Debug.Print _
        "Insert Into MiTabla (C1,C2,C3) " & _
        "Select '" & Left(tbl(fld, 0), 8) & "', '" & Right(tbl(fld, 1), 2) & "', F1 From [Text;Database=" & strNuevaRutas & " Where F" & fld + 1 + 14 & "='X'"
   
    Next
         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  
    
End Sub

Al abrir una instancia en Excel el proceso tarda mucho.... este codigo lo hace en cuestion de segundos, por ello quisiera optar por esta opcion que encontre.

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

Dany Solis
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/Diciembre/2017 a las 05:34
Pues he revisado he comparado el codigo linea por linea y no veo diferencia entre el original y el modificado usando el FileDialog, el Schema.ini tiene el nombre del archivo esto tendra algo que ver?

[Archivo.csv]
ColNameHeader=False
CharacterSet=ANSI
Format=Delimited(;)
DecimalSymbol=,
MaxScanRows=0
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: 02/Diciembre/2017 a las 12:47
En el schema.ini, se indica a qué archivo que está en la misma carpeta, se está haciendo referencia:

- https://support.microsoft.com/es-es/help/550166
- https://docs.microsoft.com/es-es/sql/odbc/microsoft/schema-ini-file-text-file-driver
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: 03/Diciembre/2017 a las 07:18
No he entendido bien tu comentario Pitxiku.

Tomando el archivo de una ruta especifica no hay problema pero usando el FileDialog y teniendo aun ahi el archivo Schema.ini se produce el error.


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: 03/Diciembre/2017 a las 13:20
Me refiero a que si en el Schema.ini, el nombre del archivo es distinto al nombre del archivo csv que estás usando, cuando Access abra el archivo csv no usará el Schema.ini

Si quieres, puedes preparar un archivo csv con datos ficticios, el schema.ini y una base de datos con el código y la tabla de destino, y se le echa un vistazo.


Editado por pitxiku - 03/Diciembre/2017 a las 13:21
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: 06/Diciembre/2017 a las 02:05
Gracias a todos por su colaboración.


Aunque ya lo pude hacer funcionar, el problema era mi archivo Schema.ini

Lo tenia guardado con ese nombre pero con extensión .txt y no .ini

Una vez corregido esto, el problema se ha solucionado.

Gracias pueden cerrar el hilo.

Saludos

DS

Clap



Editado por Dany Solis - 06/Diciembre/2017 a las 02:06
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
 Responder Responder Página  <12
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable