Como pasar un archivo TXT a SQL o a un Recordset.?

Quisiera saber si me puedes ayudar.
Necesito sacar los datos de un archivo TXT, y llevarlos a una tabla de SQL. Los datos dentro del archivo TXT se encuentran separados por Tabulaciones.
Utilice el ejemplo que pongo a continuación, pero me muestra todos los datos en una columna y estos a su vez separados solo por un símbolo (cuadrado).
Private Function Leer_Txt_con_Ado() As ADODB.Recordset
      Dim rs As ADODB.Recordset
      Set rs = New ADODB.Recordset
      Dim conn As ADODB.Connection
      Set conn = New ADODB.Connection
      'Cadena de conexión
      conn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};" & _
                    "DBQ=" & App.Path & ";", "", ""
      'Ejecutamos el recordset pasandole el archivo de texto en la cláusula From
      rs.Open "select * from [archivo.txt]", conn, adOpenStatic, _
                  adLockReadOnly, adCmdText
      'eliminamos las variables
      Set Leer_Txt_con_Ado = rs
      Set rs = Nothing
      Set conn = Nothing
End Function

2 respuestas

Respuesta
1
Lo que tu estas utilizando es para archivos separados por coma, no por tabulaciones
Por eso no te funciona.
¿Y cómo puedo hacerlo para trabajar con este tipo de archivos (tabulados)?
Tienes que abrir el archivo con un Open de VB, luego leer linea a linea y separar los campos por el tabulador.
Puedes utilizar la función InStr que convierte un linea, la que lees del archivo en un array con cada campo que esta separado pro el tabulador.
Respuesta
1
Quiero compartir contigo este código, ya que por lo visto muchos de nosotros hemos tenido dudas en este tema. Este ejemplo fue creado en todoexpertos y yo lo único que hice fue poner mi granito de arena para que esto funcione.
Suerte y no duden en consultar
Dim bd As ADODB.Connection
Dim rec As ADODB.Recordset
Dim buscar As ADODB.Recordset
Dim tres As ADODB.Recordset
Dim arreglo()
Dim i As Integer
Private Sub cmDImportar_Click()
'----------------- Apertura de DB --------*----------
Set bd = New ADODB.Connection
bd.Provider = "Microsoft.Jet.OLEDB.4.0"
bd.Properties("Data Source") = App.Path + "\base.mdb"
bd.Properties("Jet OLEDB:Database Password") = ""
bd.Open
''bd.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Sibs\otros\bdmodreloj.mdb;Persist Security Info=False"
'--------------- Proceso de Conexión -----------------
Dim nFile%, vDummy, ArrPlan, con
Dim Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10
'Cuadro de dialogo abrir
ArrPlan = App.Path + "\Temporal.txt"
con = 0
' Open the file for Input.
Open ArrPlan For Input As #1
''paso la base de TXT a MDB para mayor manejo"
Do While Not (EOF(1))
        con = con + 1
        'Separación de los datos del archivo en columnas delimitadas
        Line Input #1, Linea
       '' Input Linea, Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10
       i = 0
       BuscarCadena 1, Linea
        'j = 1
        'Do While j <= i
        'MsgBox arreglo(9, j)
        'j = j + 1
       ' Loop
        Col1 = Trim(arreglo(9, 1))
        Col2 = Trim(arreglo(9, 2))
        Col3 = Trim(arreglo(9, 3))
        Col4 = Trim(arreglo(9, 4))
        Col5 = Trim(arreglo(9, 5))
        otro = Trim(arreglo(9, 6))
        If otro = "FF FF FF FF FF" Or otro = "00 00 00 00 01" Then
            Col6 = "0"
            Col7 = "0"
            Col8 = "0"
            Col9 = "0"
            Col10 = "0"
        Else
            Col6 = Trim(arreglo(9, 6))
            Col7 = Trim(arreglo(9, 7))
            Col8 = Trim(arreglo(9, 8))
            Col9 = Trim(arreglo(9, 9))
            Col10 = Trim(arreglo(9, 10))
        End If
        Set rec = New ADODB.Recordset
        rec.Open "Select * from temporal ", bd, adOpenKeyset, adLockOptimistic
        If Col6 <> "0" Then
            With rec
                .AddNew
                !fecha = Format(Col1, "000000")
                !hora = Col2
                !terminal = Col3
                !sector = Col4
                !id_credencial = Col5
                !f1 = Col6
                !f2 = Col7
                !f3 = Col8
                !f4 = Col9
                !f5 = Col10
                .Update
                .Close
            End With
        End If
Loop
Close 1
''hago ahora el traspaso
        Set rec = New ADODB.Recordset
        rec.Open "Select * from temporal", bd, adOpenKeyset, adLockOptimistic
        If rec.BOF = True Or rec.EOF = True Then
            MsgBox " no existen registros a importar"
            Exit Sub
        End If
        rec.MoveFirst
        Do While Not rec.EOF = True
                Var_fecha = rec!fecha
                Var_idCredencial = rec!id_credencial
                Set buscar = New ADODB.Recordset
                buscar.Open "Select * from marcajes Where fecha Like '" & Var_fecha & "' And id_credencial Like '" & Var_idCredencial & "'", bd, adOpenKeyset, adLockOptimistic
                If buscar.BOF = True Or buscar.EOF = True Then
                buscar.AddNew
                    buscar!fecha = rec!fecha
                    If rec!f1 = "01" Then
                        buscar!entrada = rec!hora
                    End If
                    If rec!f1 = "02" Then ' regreso de comida o entrada nuevamente al trabajo
                        buscar!entrada2 = rec!hora
                    End If
                    If rec!f1 = "03" Then ' salgo a comer o voy a comer
                        Set tres = New ADODB.Recordset
                        tres.Open "Select min(hora) as Var_minimo from temporal where f1= '03' And id_credencial Like '" & Var_idCredencial & "'", bd, adOpenKeyset, adLockOptimistic
                        buscar!salida = tres!Var_minimo
                        Set tres = New ADODB.Recordset
                        tres.Open "Select max(hora) as Var_maximo from temporal where f1= '03' And id_credencial Like '" & Var_idCredencial & "'", bd, adOpenKeyset, adLockOptimistic
                        buscar!salida2 = tres!Var_maximo
                        tres.Close
                        Set tres = Nothing
                    End If
                    buscar!terminal = rec!terminal
                    buscar!sector = rec!sector
                    buscar!id_credencial = rec!id_credencial
                    buscar!f1 = rec!f1
                    buscar!f2 = "0"
                    buscar!f3 = "0"
                    buscar!f4 = "0"
                    buscar!f5 = "0"
                    buscar.Update
                Else
                    buscar!fecha = rec!fecha
                    If rec!f1 = "01" Then
                        buscar!entrada = rec!hora
                    End If
                    If rec!f1 = "02" Then ' regreso de comida o entrada nuevamente al trabajo
                        buscar!entrada2 = rec!hora
                    End If
                    If rec!f1 = "03" Then ' salgo a comer o voy a comer
                        Set tres = New ADODB.Recordset
                        tres.Open "Select min(hora) as Var_minimo from temporal where f1= '03' And id_credencial Like '" & Var_idCredencial & "'", bd, adOpenKeyset, adLockOptimistic
                        buscar!salida = tres!Var_minimo
                        tres.Close
                        Set tres = New ADODB.Recordset
                        tres.Open "Select max(hora) as Var_maximo from temporal where f1= '03' And id_credencial Like '" & Var_idCredencial & "'", bd, adOpenKeyset, adLockOptimistic
                        buscar!salida2 = tres!Var_maximo
                        tres.Close
                        Set tres = Nothing
                    End If
                    buscar!terminal = rec!terminal
                    buscar!sector = rec!sector
                    buscar!f1 = rec!f1
                    buscar!f2 = "0"
                    buscar!f3 = "0"
                    buscar!f4 = "0"
                    buscar!f5 = "0"
                    buscar.Update
                End If
            rec.MoveNext
        Loop
        Set rec = New ADODB.Recordset
        rec.Open "delete * from temporal", bd, adOpenKeyset, adLockOptimistic
bd.Close
MsgBox "Tarea Finalizada", vbInformation, "Procesos completados"
Exit Sub
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas