Pregunta: | 25863 - INSERTAR EN LA BASE DE DATOS ARCHIVOS PLANOS |
Autor: | María Isabel Mora Penagos |
Hola, necesito que por favor me comenten si existe una o varias instrucciones en Visual Basic 4.0 para subir archivos planos a una base de datos en Access si necesidad de leer linea por linea e insertar en una tabla.
Tengo el siguiente código, el cual crea una tabla con la información del archivo plano, pero no se como insertar esta información a una tabla existente. Set MyTableDef = gBD(0).CreateTableDef("PERSONAS_INICIAL") MyTableDef.Connect = "Text;Database=C:DATOS\" MyTableDef.SourceTableName = "Plano.txt" gBD(0).TableDefs.Append MyTableDef Por otra parte, cuando se utiliza este código los datos de tipo double no suben correctamente y el encabezado de la tabla es el primer registro o la primera linea del archivo plano. Agradezco la colaboración. |
Respuesta: | Christian Tomas Benitez Morel |
Hola, hay una forma, comun, vieja y sencilla de hacer eso que vos queres,
que es con la instruccion OPEN que se utilizaba con basic para abrir archivos de acceso directo y secuencial, ej. Open txtNombreArchivo For Random As #1 Len = Len(MiRegistro) Cant = Int(LOF(1) / Len(MiRegistro)) + 1 If Cant > 0 Then posicion = 1 sInSQL = "delete from tmpMarcas" Ejecuta_Instruccion_ABM sInSQL lblAccion = "Importando datos del Reloj" pBarOperacion.Value = 0 pBarOperacion.Max = Cant Else MsgBox "Error, el archivo no contiene datos" End If For posicion = 1 To Cant pBarOperacion.Value = posicion Get #1, posicion, MiRegistro If InStr(1, UCase(MiRegistro.Ced), "F") > 0 Then sCedula = Trim(Left(MiRegistro.Ced, InStr(1, UCase(MiRegistro.Ced), "F") - 1)) Else If IsNumeric(MiRegistro.Ced) Then sCedula = MiRegistro.Ced End If If IsNumeric(sCedula) And IsDate(MiRegistro.fecha) _ And Len(Trim(MiRegistro.Hora)) = 5 _ And Len(Trim(MiRegistro.tipo)) = 1 Then If Format(sFechaMin, "yyyymmdd") > Format(MiRegistro.fecha, "yyyymmdd") Then sFechaMin = MiRegistro.fecha End If If Format(sFechaMax, "yyyymmdd") < Format(MiRegistro.fecha, "yyyymmdd") Then sFechaMax = MiRegistro.fecha End If sInSQL = "insert into Marcas " sInSQL = sInSQL + "(ced, fecha, hora, tipo, nodo, obs)" sInSQL = sInSQL + " values (" sInSQL = sInSQL + Trim(sCedula) sInSQL = sInSQL + ", '" + Trim(MiRegistro.fecha) sInSQL = sInSQL + "', '" + Trim(Left(Trim(MiRegistro.Hora), 2) + Right(Trim(MiRegistro.Hora), 2)) Select Case Trim(MiRegistro.tipo) Case "1", "E" sTipo = "E" Case "2", "S" sTipo = "S" End Select sInSQL = sInSQL + "', '" + Trim(sTipo) sInSQL = sInSQL + "', '" + Trim(MiRegistro.Filler) sInSQL = sInSQL + "', '" + sSucursal + "')" Ejecuta_Instruccion_ABM sInSQL sInSQL = "insert into tmpMarcas " sInSQL = sInSQL + "(ced, fecha, hora, tipo, nodo, obs)" sInSQL = sInSQL + " values (" sInSQL = sInSQL + Trim(sCedula) sInSQL = sInSQL + ", '" + Trim(MiRegistro.fecha) sInSQL = sInSQL + "', '" + Trim(Left(Trim(MiRegistro.Hora), 2) + right(Trim(MiRegistro.Hora), 2)) Select Case Trim(MiRegistro.tipo) Case "1", "E" sTipo = "E" Case "2", "S" sTipo = "S" End Select sInSQL = sInSQL + "', '" + Trim(sTipo) sInSQL = sInSQL + "', '" + Trim(MiRegistro.Filler) sInSQL = sInSQL + "', '" + sSucursal + "')" Ejecuta_Instruccion_ABM sInSQL End If sCedula = "" Next posicion Close #1 |
Respuesta: | Christian Tomas Benitez Morel |
Hola, hay una forma, comun, vieja y sencilla de hacer eso que vos queres,
que es con la instruccion OPEN que se utilizaba con basic para abrir archivos de acceso directo y secuencial, ej. 'Definicion del registro en el modulo Type Record Ced As String * 9 fecha As String * 9 Hora As String * 6 tipo As String * 1 Filler As String * 6 kk As String * 2 End Type 'Definicion del registro en el procedimiento dim MiRegistro as record dim Cant as integer, posicion as integer 'en el nombre del archivo no importa la extension Open "c:\Archivo.txt" For Random As #1 Len = Len(MiRegistro) Cant = Int(LOF(1) / Len(MiRegistro)) + 1 If Cant > 0 Then posicion = 1 Else MsgBox "Error, el archivo no contiene datos" End If For posicion = 1 To Cant Get #1, posicion, MiRegistro Next posicion Close #1 a la par que lees una linea de tu archivo de texto, lo insertas en una tabla temporal en tu BD, con una instruccion sql en ADO o en DAO. ojala te sirva, a mi me fue muy util y solucione un gran problema. SUERTE. |