Como puedo crear un formulario que me deje seleccionar el archivo a importar y que columnas o campos quiero importar del mismo?

Quiero crear una base de datos que me deje escoger el archivo a importar y que me muestre las columnas que tiene para poder seleccionar cuales deseo traer a mi base de datos y que me cree una tabla con las columnas seleccionadas, alguien me ayuda por fa :( esto lo quiero hacer en access

1 Respuesta

Respuesta
1

Entiendo que no quiere utilizar el asistente de importación de Access sino mediante un formulario y código VBA .

ASISTENTE DE ACCESS - "Descartado"

Lo hago utilizando un archivo .INI. para definir la configuración de las columnas.

ARCHIVO Schema.INI

Para hacerlo más simple solo defino 5 campos y de tipo texto. Los llamo campo1, campo2,... campo5, son los nombres de los campos para la tabla.

ARCHIVO Prueba.txt

FORMULARIO PARA DEFINIR LOS CAMPOS A IMPORTAR

Voy a importar solo los campos, campo1, campo3 y campo5, hago clic en Importar y obtengo.

Me ha creado la tabla que llamo tblimporta con 3 columnas, por simplicidad asigné el nombre de la tabla en el código pero se puede elegir de otra forma desde el mismo formulario.

CÓDIGO DEL BOTÓN IMPORTAR

Private Sub btnImportar_Click()
 On Error GoTo hay_error
 'Herramienta para importar archivo texto con
 'definición de campos.
 'Elaborado por: EDUARDO PEREZ FERNANDEZ
 'Fecha: 24/07/2021
 'Colombia
 Dim strSQL As String
 Dim strCampos As String
 Dim ctrl As Control
  For Each ctrl In Me.Controls
      If ctrl.ControlType = acOptionButton Then
         If ctrl.Value = True Then
          strCampos = strCampos & "t." & ctrl.Tag & ","
         End If
       End If
  Next ctrl
  If strCampos = "" Then
    MsgBox "Debe seleccionar al menos un campo", vbInformation, "Error.."
    Exit Sub
  End If
  If existe() Then
     DoCmd.DeleteObject acTable, "tblimporta"
  End If
  strCampos = Left(strCampos, Len(strCampos) - 1)
  strCampos = "SELECT " & strCampos
  strSQL = strCampos & vbCrLf
  strSQL = strSQL & " INTO tblimporta FROM [Text;HDR=No;FMT=Delimited;Database=" & CurrentProject.Path & "].[Prueba.txt] AS t ;"
 CurrentDb.Execute strSQL
 If Err.Number = 0 Then
   MsgBox "Tabla creada satisfactoriamente", vbInformation, "Importando"
   CurrentDb. TableDefs. Refres

Este procedimiento requiere de una función para verificar si la tabla existe.

Function existe() As Boolean
Dim Tbl As AccessObject
For Each Tbl In CurrentData.AllTables
  If Tbl.Name = "tblimporta" Then
  existe = True
  Exit For
End If
Next Tbl
End Function

Si quiere el ejemplo lo puede solicitar a [email protected], favor anotar en el asunto la consulta.

He mejorado el ejemplo. No tiene sentido seleccionar el archivo a importar porque para poder seleccionar las columnas se debe crear una definición de los datos mediante un archivo schema.ini.

Lo he denominado "Herramienta" ya que se puede adaptar fácilmente configurando el archivo schema.ini y cambiar el nombre del archivo txt.

La ventaja de este ejemplo es que únicamente se muestran en el cuadro de lista los campos o columnas que contiene el archivo texto para de éste elegir los campos, también se obtiene el delimitador de campos y el número de columnas.

Quien le interese estudiar el código, puede solicitarlo a [email protected], favor anotar en el asunto "Quiero la herramienta de importación"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas