Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/10/2004, 03:27
tolotoco
 
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