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
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.
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