Vincular ficheros de texto a Access mediante ADO

24/07/2003 - 14:24 por Manuel C. | Informe spam
Hola Grupo:

Necesito vincular ficheros planos de texto a una base de datos
Access mediante ADO, en visual basic por supuesto. Alguien sabe como consigo
esto?.

Un saludo y Gracias

Manuel C.

Preguntas similare

Leer las respuestas

#1 DIEGOBB
24/07/2003 - 23:04 | Informe spam
Hay un link imprescindible para el tema de cadenas de conexión ADO:

http://www.able-consulting.com/ADO_Conn.htm

De su contenido te extraigo lo que sigue:

=
You can also open a Text file using the JET OLE DB Provider

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\somepath\;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""'Then open
a recordset based on a select on the actual file

oRs.Open "Select * From MyTextFile.txt", oConn, _
adOpenStatic, adLockReadOnly, adCmdText

For more information, see: Q262537

=
La referencia última se refiere a un artículo de la KB de Microsoft
donde te detallan más el proceso (cuida de escribirlo todo en una
línea):

http://support.microsoft.com/defaul...?scid=http://support.microsoft.com:80/support/kb/articles/Q262/5/37.ASP&NoWebContent=1

Saludos,

Diego Buendia
Barcelona, Spain


Necesito vincular ficheros planos de texto a una base de datos
Access mediante ADO, en visual basic por supuesto. Alguien sabe como consigo
esto?.

Un saludo y Gracias

Manuel C.
Respuesta Responder a este mensaje
#2 Fernando
24/07/2003 - 23:51 | Informe spam
Hola

¿Podrias ser mas explicito en lo que quieres hacer?

Atte. Fdo. Fdez.
Respuesta Responder a este mensaje
#3 Manuel C.
25/07/2003 - 08:14 | Informe spam
Gracias Enrique por el link del artículo, tiene muchas cosas interesantes.
Respecto a lo que me interesa, es cierto que es el punto 5 como me indicabas
lo que yo quiero hacer, Pero con la particularidad que la forma con la que
está escrito es utilizando un fichero delimitado. ¿No se puede hacer lo
mismo utilizando una especificación de inportación?

.Properties("Jet OLEDB:Link Provider String") "TEXT;DATABASE=" & _
App.Path &
";HDR=Yes;FMT=Delimited"
Un saludo:

Manuel C.
Respuesta Responder a este mensaje
#4 Manuel C.
25/07/2003 - 09:11 | Informe spam
Hola:

Estoy probando de todas maneras el Vincular con delimitados, y al
añadir la tabla con:

cat.Tables.Append tbl

me aparece el error

Error '-2147217860 (80040e3c)' en tiempo de ejecución :
El motor de base de datos Microsoft Jet no pudo encontrar el objeto
"D:\proyectos\demograficos.txt".
Asegúrese de que el objeto existe, y que ha escrito el nombre y la ruta
de acceso al objeto correctamente.

He comprobado que el fichero existe y no se el error donde se produce.

El código es el siguiente:

Option Explicit

Private con As New ADODB.Connection

Public Sub Main()
Dim AApp As New Access.Application


Call Conexion_BD
Call LinkTextWithADO(App.Path & "\DEMOGRAFICOS#TXT",
"DEMOGRAFICOS_OTRA")

End Sub

Public Sub Conexion_BD()
Dim ruta_BD As String

On Error GoTo error
ruta_BD = App.Path & "\TNS.mdb"
Set con = New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "
& ruta_BD & ""
con.Open

error:
If Err.Number <> 0 Then
MsgBox "Conexion a la base de datos no establecida", vbExclamation,
App.EXEName
End If
End Sub

Public Sub LinkTextWithADO(Fichero As String, Nombre As String)
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table

' Creo un nuevo catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = con

' Creo la nueva tabla
Set tbl = New ADOX.Table
tbl.Name = Nombre
Set tbl.ParentCatalog = cat

' Establezco las propiedades para crear el vínculo
With tbl
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "TEXT;DATABASE=" & _
App.Path &
";HDR=Yes;FMT=Delimited"
.Properties("Jet OLEDB:Remote Table Name") = Fichero
End With

' Añado la tabla a la colección 'Tables'
cat.Tables.Append tbl

End Sub


Alguien me puede indicar que estoy haciendo mal?

Un saludo:

Manuel C.
Respuesta Responder a este mensaje
#5 Softjaen
25/07/2003 - 11:06 | Informe spam
"Manuel C." escribió:

Pero con la particularidad que la forma con la que está escrito es
utilizando un fichero delimitado. ¿No se puede hacer lo
mismo utilizando una especificación de inportación?




No entiendo muy bien tu pregunta. Tu puedes vincular tanto un archivo de
texto delimitado como de ancho fijo, pero con la peculiaridad que para éste
último formato debes de crear en la misma carperta donde se encuentre el
archivo de texto, un archivo de información de esquema que necesariamente se
tendrá que llamar «Schema.ini». Para más información sobre dicho archivo,
consulta el apartado número dos del artículo que te indiqué.

Pero lo que no puedes vincular es el resultado de una consulta de
importación. Puedes crear una nueva tabla en la base de datos con los datos
del archivo de texto, importando a la base el resultado de una consulta SQL
de selección, pero eso no sería vincular un archivo; eso sería crear una
nueva tabla. Para vincular un archivo del tipo que sea, necesitarás vincular
todo el archivo completo. Una vez vinculado a la base de datos, puedes crear
las consultas SQL necesarias para ver los datos de los campos que creas
conveniente. Pero, ¡ojo!: si tienes un archivo de texto vinculado, no podrás
modificar campos y eliminar registros; el ISAM de texto sólo te permitirá
añadir nuevos registros a la tabla vinculada.

Si por ejemplo tienes un archivo de texto de ancho fijo llamado
«Clientes.txt», compuesto de tres campos, necesitarás especificar el ancho
de los campos en el archivo de información de esquema «Schema.ini». Éste
podría ser así:

[Clientes.txt]
ColNameHeader=True
CharacterSet=ANSI
Format=FixedLength
Col1=IdCliente Long Width 7
Col2=Nombre Text Width 35
Col3=CIF Text Width 9

Y las propiedades dinámicas «OLEDB, las especificaríamos así:

With tbl
.Properties("Jet OLEDB:Create Link") = True

.Properties("Jet OLEDB:Link Provider String") = "TEXT;DATABASE=" & _
App.Path

.Properties("Jet OLEDB:Remote Table Name") = "Clientes#txt"
End With

Un saludo.

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida