** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Visual Basic Clásico (VB3...VB6)
  Mensajes nuevos Mensajes nuevos RSS - Vincular a DBF
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoVincular a DBF

 Responder Responder
Autor
Mensaje
Medardo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2005
Localización: Cuba
Estado: Sin conexión
Puntos: 1987
Enlace directo a este mensaje Tema: Vincular a DBF
    Enviado: 12/Julio/2012 a las 19:53
Hola
Es un placer estar de nuevo por aquí después de un tiempo.
Resulta que estoy realizando una pequeña aplicación en Visual Basic, que necesita realizar distintas consultas a unos ficheros .dbf de Visual FoxPro.
La idea que tengo es vincular esas tablas .dbf a la base de datos de Access asociada a mi aplicación para a partir de ahí, realizar las consultas necesarias.
Nunca he trabajado con estos tipos de ficheros (.dbf) y no he logrado realizar la vinculación. Manualmente lo logro, pero quisiera hacerlo automáticamente por código.
Hasta ahora he logrado la conexión y leer la tabla .dbf a través del siguiente código:

Dim conexionDBF As String
Dim strPathDBF As String
Dim cnnDBF As New ADODB.Connection
Dim rstDBF As New ADODB.Recordset

Set cnnDBF = New ADODB.Connection
Set rstDBF = New ADODB.Recordset

strPathDBF = App.Path + "\" + "provincias"     'tabla .dbf

cnnDBF.CursorLocation = adUseClient

conexionDBF = "Driver={Microsoft Visual FoxPro Driver};" & _
                "SourceType=DBF;" & _
                "SourceDB=" & strPathDBF & ";" & _
                "Exclusive=no;"
cnnDBF.Open conexionDBF

rstDBF.Open "SELECT * FROM provincias", cnnDBF, adOpenStatic, adLockOptimistic


Con esto, ya puedo hacer un bucle a la tabla .dbf y leerlo, y aprovechando el bucle puedo insertar los datos en una tabla de Access, pero no es esa la vía que quiero, sino, vincular el .dbf a una tabla de Access.
He hecho muchísimas pruebas, pero ninguna ha resultado, unas me da error de formato con la base de datos, otras que no encuentra el fichero .dbf, y otras con el ISAM instalable. He probado también con ADOX.
¿Alguna idea, por favor?
 
Editado para eliminar el subrayado.


Editado por Tikimore - 12/Julio/2012 a las 20:23
Arriba
Medardo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2005
Localización: Cuba
Estado: Sin conexión
Puntos: 1987
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 22:30
Hola Pedro (prga)
Le sugiero exponga los códigos que me ofreció. Estoy tratando de enviarle un mensaje privado pero me dice que excedió la cantidad de mensajes privados recibidos.
Saludos
Desde La Habana, Cuba
Medardo
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: en línea
Puntos: 3157
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 22:45
Hola.
 El codigo siguiente está comprobado en access 2000/2003, en versiones superiores ??????.
 
Public Sub vinculofoxpro()
On Error Resume Next
Dim micon As String
Dim mitabla As Object 'New ADOX.Table
Dim micat As Object 'New ADOX.Catalog
Dim micarpeta As String
Dim nomtabla As String
Set mitabla = CreateObject("adox.table")
Set micat = CreateObject("adox.catalog")
micarpeta = CurrentProject.Path 'cambiar
nomtabla = "mitabla" 'cambiar
DoCmd.DeleteObject acTable, nomtabla
micon = "ODBC;DSN=Visual FoxPro Tables;"
micon = micon & "SourceDB=" & micarpeta
micon=micon & ";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
micat.ActiveConnection = CurrentProject.Connection
 With mitabla
 .Name = nomtabla
         Set .ParentCatalog = micat
            .Properties("Temporary Table") = False
            .Properties("Jet OLEDB:Cache link name/Password") = False
            .Properties("Jet OLEDB:Remote Table name") = nomtabla
            .Properties("Jet OLEDB:Link provider string") = micon
            .Properties("Jet OLEDB:exclusive link") = False
            .Properties("Jet OLEDB:create link") = True
            .Properties("Jet OLEDB:table hidden in access") = False
 End With
micat.Tables.Append mitabla
micat.Tables.Refresh
' a veces se ve y otras no, hay que cambiar a consultas y luego a tablas. Solo lectura
' crea indice unico en tabla vinculada sí hay necesidad de editar
docmd.runsql "create unique index indprincipal on " & nomtabla & " (campo1,  campo2...) with primary
End Sub
 
Espero que sirva de ayuda.
Ya comentas.
Un saludo a todos
Arriba
Medardo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2005
Localización: Cuba
Estado: Sin conexión
Puntos: 1987
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 22:52
Saludos
Desde La Habana, Cuba
Medardo
Arriba
Medardo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2005
Localización: Cuba
Estado: Sin conexión
Puntos: 1987
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 22:53
Necesito me den una idea del por qué mis mensajes salen subrayados y como si fueran vínculos.
Saludos
Desde La Habana, Cuba
Medardo
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18807
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 22:59
Hola!
 
creo que es evidente, tal como indica el encabezado de tu mensaje te ocurre por utilizar Word como origen del texto, utilizar Notepad o el propio editor del foro para ello y no tendrás problemas.
 
Por cierto, mejor no utilices Chrome que tambien trae problemas.
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: en línea
Puntos: 3157
Enlace directo a este mensaje Enviado: 13/Julio/2012 a las 23:01
Hola.
El subrayado, codigo raro etc. etc casi seguro que se debe al copiar y pegar directamente desde word. Hay que pasar por el bloc de notas o similar.
Pregunta: El código expuesto anteriormente funciona en access 2000/3 ¿Lo has probado en versiones posteriores?.
Ya comentas.
Un saludo a todos
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: en línea
Puntos: 3157
Enlace directo a este mensaje Enviado: 16/Julio/2012 a las 20:46
Hola.
ELa siguiente modificación funciona desde el vba de word contra una base de datos access 2000 que esta en la misma carpeta. Vincula a una tabla Fox pro
Public Sub vinculofoxpro()
'este código funciona desde el vba word 2003 contra una base de datos access 2000(vinculafoxpro.mdb)
' para versiones posteriores de access hay que modificar el provider=microsoft.jet.oledb.4.0 por el que corresponda a dicha versión
On Error Resume Next
Dim micon As String
Dim miconaccess As String
Dim mitabla As Object 'New ADOX.Table
Dim micat As Object 'New ADOX.Catalog
Dim micarpeta As String
Dim nomtabla As String
Dim micomando As Object  'New ADODB.Command
Set mitabla = CreateObject("adox.table")
Set micat = CreateObject("adox.catalog")
Set micomando = CreateObject("adodb.command")
micarpeta = activedocument.Path
nomtabla = "nombretablafox"
micon = "ODBC;DSN=Visual FoxPro Tables;"
micon = micon & "SourceDB=" & micarpeta
micon = micon & ";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
miconaccess = "Provider=Microsoft.jet.oledb.4.0;Data source=" & micarpeta & "\vinculafoxpro.mdb;"
micomando.ActiveConnection = miconaccess
micomando.CommandText = "drop table " & nomtabla
micomando.Execute
micat.ActiveConnection = miconaccess
 
 With mitabla
 .Name = nomtabla
         Set .ParentCatalog = micat
            .Properties("Temporary Table") = False
            .Properties("Jet OLEDB:Cache link name/Password") = False
            .Properties("Jet OLEDB:Remote Table name") = nomtabla
            .Properties("Jet OLEDB:Link provider string") = micon
            .Properties("Jet OLEDB:exclusive link") = False
            .Properties("Jet OLEDB:create link") = True
            .Properties("Jet OLEDB:table hidden in access") = False
 End With
micat.Tables.Append mitabla
micat.Tables.Refresh
micat.Close
micomando.ActiveConnection = miconaccess
micomando.CommandText = "create unique index inprimario on " & nomtabla & " (campo1, campo2....) with primary"
micomando.Execute
End Sub
 
Pruebalo y ya comentas.
Un saludo a todos
Arriba
Medardo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2005
Localización: Cuba
Estado: Sin conexión
Puntos: 1987
Enlace directo a este mensaje Enviado: 16/Julio/2012 a las 20:57
Hola Pedro
Siempre lo he comentado con mis colegas, este es el mejor foro, las probabilidades de que siempre te vayas con una solución, son amplias.
He estado en otros foros como el de VB-Mundo, que es muy bueno, pero este tiene su misterio.
Pues sí, este último código funciona perfecto.
Para este caso, es solo cambiar:
micarpeta=ActiveDocument.Path
por
micarpeta=app.path
además de los nombres de tablas y campos.

Por mi parte, es todo.

Un millón de gracias y un abrazo.
Saludos
Desde La Habana, Cuba
Medardo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable