Foros del Web » Programación para mayores de 30 ;) » .NET »

pasar un archivo txt a una tabla de access

Estas en el tema de pasar un archivo txt a una tabla de access en el foro de .NET en Foros del Web. Hola, como han estado. Tengo un problema, no se si alguien me puede ayudar a resolverlo, estoy usando visual basic 6.0 y necesito pasar un ...
  #1 (permalink)  
Antiguo 12/10/2004, 16:36
 
Fecha de Ingreso: septiembre-2004
Mensajes: 10
Antigüedad: 19 años, 7 meses
Puntos: 0
pasar un archivo txt a una tabla de access

Hola, como han estado.

Tengo un problema, no se si alguien me puede ayudar a resolverlo, estoy usando visual basic 6.0 y necesito pasar un artchivo texto delimitado por comas a una tabla de una base de datos de access.

No se como hacerlo, y si alguien me podria hechar la mano se lo agradeceria mucho.
  #2 (permalink)  
Antiguo 19/10/2004, 03:27
 
Fecha de Ingreso: febrero-2004
Ubicación: Granada
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
Te adjunto el código de uno de los procedimientos que tengo hecho para recuperar datos de un archivo de texto y añadirlos a la base de datos.
Un saludo

Private Sub ImportarAbonados()
Dim NomArch As String
Dim LineaFinal As String ' Recoge los datos a recuperar
' Activa el control de errores
On Error GoTo ErrorFichero

' Abre la base de datos para recoger los datos de los campos
'Declara la conexión a la base de datos
Dim MDB As OleDb.OleDbConnection
'El adaptador hace la consulta y recupera unos datos
Dim DAdapt As OleDb.OleDbDataAdapter
Dim cmd As OleDb.OleDbCommandBuilder
'El DataSet recoge los datos de la consulta en una tabla temporal para trabajar con ellos
Dim ds As DataSet
Dim puntero As Long
Dim MiSQL As String
Dim total As Long

'Abre una conexión nueva
MDB = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLED B.4.0;Data Source=C:\Impagados\ImpagadosDat.mdb;Persist Security Info=False")
MDB.Open()
'Crea el Adaptador y hace la consulta con la conexión que hemos creado y mete los
'datos recuperados en una tabla creada de forma temporal a la que hemos llamado
'Abonados
DAdapt = New OleDb.OleDbDataAdapter("Select * from Abonados", MDB)
cmd = New OleDb.OleDbCommandBuilder(DAdapt)
ds = New DataSet()
DAdapt.Fill(ds, "Abonados")
NomArch = lblAbonados.Text
' Abre el archivo para LEER
Dim Linea As String
Dim fichero As New System.IO.StreamReader(NomArch)
total = 0
Linea = fichero.ReadLine()
Do Until Linea Is Nothing
total = total + 1
Linea = fichero.ReadLine()
Loop
fichero.Close()
fichero = New System.IO.StreamReader(NomArch)
' Inicializa la variable de puntero
puntero = 0
lblTotalProcesados.Text = total
lblRechazados.Text = 0
lstRechazados.Items.Add("IMPORTACIÓN DE LOS ABONADOS")
' Inicia la recogida de datos hasta fin de fichero
Linea = fichero.ReadLine()
Do Until Linea Is Nothing
'Recoge los datos del fichero para insertarlos en la base de datos
Dim NuevaPos As Integer
Dim Datos As New System.Collections.Specialized.StringCollection
NuevaPos = Linea.IndexOf("#")
Do Until NuevaPos < 0
If NuevaPos >= 0 Then
Datos.Add(Linea.Substring(0, NuevaPos))
Linea = Linea.Substring(NuevaPos + 1)
NuevaPos = Linea.IndexOf("#")
Else
If (Linea <> "") Then Datos.Add(Linea)
End If
Loop

If (Datos.Count >= 10) Then
Dim registros As DataRow()
Dim registro As System.Data.DataRow

' Verifico que la clave no se va a repetir
registros = ds.Tables("Abonados").Select("CODDT=" + Datos(0) + " and CODDR=" + Datos(1) + " and CODSER=" + Datos(2) + " and CODADO=" + Datos(3))
If (registros.Length <= 0) Then
registro = ds.Tables("Abonados").NewRow()
registro("CODDT") = Int(Datos(0))
registro("CODDR") = Int(Datos(1))
registro("CODSER") = Int(Datos(2))
registro("CODADO") = Int(Datos(3))
registro("NOMADO") = Datos(4)
registro("DOMADO") = Datos(5)
registro("MUNADO") = Datos(6)
registro("EXPADO") = Datos(7)
If Datos(8) <> "" Then
registro("POLADO") = Datos(8)
Else
registro("POLADO") = ""
End If
If Datos(9) <> "" Then
registro("NIFADO") = Datos(9)
Else
registro("NIFADO") = ""
End If
ds.Tables("Abonados").Rows.Add(registro)
Else
'Añade el error en la lista de errores
lstRechazados.Items.Add("DUPLICADO - DT: " + Datos(0) + " - DR: " + Datos(1) + " - Servicio: " + Datos(2) + " - Abonado: " + Datos(3) + " - " + Datos(4))
lstRechazados.Refresh()
'Incrementa el contador de registros rechazados en uno
lblRechazados.Text = lblRechazados.Text + 1
lblRechazados.Refresh()
End If
Else
MsgBox("Registro incompleto", MsgBoxStyle.OKOnly, "Error en los datos")
'Añade el error en la lista de errores
lstRechazados.Items.Add("DUPLICADO - DT: " + Datos(0) + " - DR: " + Datos(1) + " - Servicio: " + Datos(2) + " - Abonado: " + Datos(3) + " - " + Datos(4))
lstRechazados.Refresh()
'Incrementa el contador de registros rechazados en uno
lblRechazados.Text = lblRechazados.Text + 1
lblRechazados.Refresh()
End If
' Rellena los datos para escribirlos en el fichero
puntero = puntero + 1
lblProcesados.Text = puntero
lblProcesados.Refresh()
Progreso(Int(((puntero) / total) * 100))
Linea = fichero.ReadLine()
Loop
DAdapt.Update(ds, "Abonados")
MDB.Close()
fichero.Close()
lstRechazados.Items.Add("TERMINADA IMPORTACIÓN DE LOS ABONADOS - " + lblProcesados.Text + " Registros.")
lstRechazados.Items.Add("RECHAZADOS - " + lblRechazados.Text + " Registros.")
lblRechazados.Text = lblRechazados.Text
Me.Refresh()
Exit Sub

ErrorFichero:
'Muestra el mensaje de error
Select Case Err.Number
Case 5
MsgBox("Existen registros duplicados. Revise los datos", MsgBoxStyle.OKOnly, "Datos duplicados")
Case Else
MsgBox(Err.Number & " - " & Err.Description, vbOKOnly, "Error de importación")
End Select
'Añade el error en la lista de errores
lstRechazados.Items.Add("Registros duplicados")
'Incrementa el contador de registros rechazados en uno
lblRechazados.Text = lblRechazados.Text + 1
'Vuelve a la misma que produjo el error
Resume Next
End Sub

' Indicar que los campos están separados por #. En la sentencia donde recupera los campos, con "IndexOf" , solo tienes que cambiar la # por el ;

Última edición por tolotoco; 19/10/2004 a las 03:30 Razón: Ampliar respuesta
  #3 (permalink)  
Antiguo 22/10/2004, 13:07
 
Fecha de Ingreso: mayo-2004
Ubicación: Av. FFAA, Caracas
Mensajes: 29
Antigüedad: 19 años, 11 meses
Puntos: 0
Hola solo queria preguntarte si este codigo te funciono, porq estoy intentado hacer lo mismo, es decir, pasar lo que tengo en un txt a una tabla de access desde visual basic 6... yo tengo el codigo de como crearlos por si te interesa... pero como importar esos datos la verdad no he conseguido la forma... de antemano te agradeceria tu ayuda...
  #4 (permalink)  
Antiguo 25/10/2004, 01:16
 
Fecha de Ingreso: febrero-2004
Ubicación: Granada
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
El codigo que te he pasado me funciona bien. Debes tener en cuenta que el roden de los campos y el tipo deben ser los mismos en la tabla de la base de datos Access y en la definicion que tu le des en el codigo. Por lo demas, ya te digo, a mi me funciona sin problemas.
Si quieres, puedes pasarme el codigo que utilizas para crear el txt y lo reviso y adapto para el paso de txt a Access.

Mi usuario [email protected]
Un saludo
  #5 (permalink)  
Antiguo 25/10/2004, 10:49
 
Fecha de Ingreso: mayo-2004
Ubicación: Av. FFAA, Caracas
Mensajes: 29
Antigüedad: 19 años, 11 meses
Puntos: 0
Listo... el problemilla q tenia es q este codigo funciona para visual.net y estoy trabajando con visual 6... pero ya consegui como pasar los datos del txt la tabla de access de todas maneras muchas gracias por tu ayuda...
  #6 (permalink)  
Antiguo 03/01/2005, 20:41
 
Fecha de Ingreso: septiembre-2004
Mensajes: 10
Antigüedad: 19 años, 7 meses
Puntos: 0
ayuda

Cita:
Iniciado por estelam2004
Listo... el problemilla q tenia es q este codigo funciona para visual.net y estoy trabajando con visual 6... pero ya consegui como pasar los datos del txt la tabla de access de todas maneras muchas gracias por tu ayuda...
hola como has estado espero que bien, oye un gran favor me podrias pasar tu codigo que sirve para pasar un archivo txt a una base de datos de access utilizando visal basic 6.

De antemano muchas gracias.
  #7 (permalink)  
Antiguo 25/01/2005, 10:47
 
Fecha de Ingreso: octubre-2004
Mensajes: 15
Antigüedad: 19 años, 6 meses
Puntos: 0
Oye, ya se hace que hace tiempo de este post, pero es que yo estoy intentando hacer algo como eso, y cada fichero.readline() se me come 2 o tres líneas, además pasa de los acentos y creo que de algún otro carácter.

¿Por qué puede ser todo esto? Mi codigo:

Dim p As String = ruta
Dim a As New System.IO.StreamReader(p)
Dim texto As String
dim arr as arraylist= new arraylist()
texto = a.ReadLine
While Not texto Is Nothing
arr.add(texto)
texto = a.ReadLine()
End While

a.Close()
  #8 (permalink)  
Antiguo 25/01/2005, 11:08
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
se me come 2 o tres líneas, además pasa de los acentos y creo que de algún otro carácter
Puede ser por el tipo de encoding.

Prueba con ésto:

Cita:
Dim a As New System.IO.StreamReader(p,System.Text.Encoding.UTF7)
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #9 (permalink)  
Antiguo 25/01/2005, 11:11
 
Fecha de Ingreso: febrero-2004
Ubicación: Granada
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
Guarda los datos que vas recuperando en un Specialized.StringCollention

Dim arr As New System.Collections.Specialized.StringCollection

Si miras en el ejemplo que incluí te puede dar una idea. Ese código funciona bien. Lo tengo implementado en una aplicación que recupera los datos de un txt y los añade en una base de datos Access.

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:11.