locked
¿Cómo abrir un archivo .dbf desde Visual Basic? RRS feed

  • Pregunta

  • Hola necesito abrir un archivo .dbf desde Visual Basic, pero no se si sea posible, si sabes como hacerlo te lo agradecería.

    Tengo un archivo que contiene una tabla, deseo leer los datos para modificarlos y después imprimirlos en un formato especifico, mi problema es como leer los datos y pasarlos a un DataGrid o un DataGridView...

    Estoy utilizando VisualBasic 2005 Express

    Gracias de antemano

    martes, 6 de marzo de 2007 2:37

Respuestas

  • También puedes acceder a la(s) tabla(s) mediante odbc. Simplemente configuras un origen de datos odbc de tipo Microsoft dBase driver, que apunte a la carpeta que contiene tus tablas. Luego en tu proyecto de VB, te creas una cadena de conexión referenciando al origen de datos que hayas creado y.... listo, ya puedes hacer todo lo que harías con cualquier otro motor de BD (bueno... casi todo)

    Saludos.

    --------------------
    J. Marcos Troncoso
    Cochabamba - Bolivia

    martes, 6 de marzo de 2007 13:06

Todas las respuestas

  •  

    Hola,

    Un DBF es un archivo de dBase sino me equivoco... osea un backup de una base de datos supongo.

    Hombre si habres el archivo con un editor de texto puedes mirar si tiene alguna estructura concreta o es una locura.

    En el caso de que tenga estrucutura puedes abrirlo como si fuera un archivo de texto y tratarlo como tal siquiendo los patrones de la estructura.

    Pero claro...

    ¿No seria mejor probar si Access puede importar el archivo? Luego solo tendrias que leer una base de datos access que es muy sencillito.

    Saludos.

    martes, 6 de marzo de 2007 5:35
    Moderador
  • También puedes acceder a la(s) tabla(s) mediante odbc. Simplemente configuras un origen de datos odbc de tipo Microsoft dBase driver, que apunte a la carpeta que contiene tus tablas. Luego en tu proyecto de VB, te creas una cadena de conexión referenciando al origen de datos que hayas creado y.... listo, ya puedes hacer todo lo que harías con cualquier otro motor de BD (bueno... casi todo)

    Saludos.

    --------------------
    J. Marcos Troncoso
    Cochabamba - Bolivia

    martes, 6 de marzo de 2007 13:06
  • Gracias me ha sido de mucha ayuda, eso es lo que quería....
    miércoles, 7 de marzo de 2007 1:17
  • Me podrías enviar un ejempo de una cadena de conexón de como abrir una base Access desde Visual Basic, y además si puede ser un ejemplo de como acceder a cualquier tabla de la misma.

    Mil gracias.
    Nico.-

    miércoles, 14 de marzo de 2007 15:30
  •  

    Hola,

    Mira a ver esto:

    http://www.elguille.info/NET/ASPNET/fwAccessADONET.htm

    Un saludo.

    miércoles, 14 de marzo de 2007 15:40
    Moderador
  •  

    Hola  yo tengo el mismo inconveniente.  Yo quiero abrir un archivo .dbf(tabla de foxpro) para modificar sus datos, pero no se es como se hace la conexion( Por codigo)  ya instalé el driver de foxpro y cree un dns, cuando hago una consulta por el asisten a un datagriew  muy bien muestra datos. pero yo quiero es hacer esa conexion es por codigo y cargarla a un dataset.  le agradezco y me pueden ayudar..

     

    Gracias

    viernes, 8 de febrero de 2008 14:29
  • Mira, yo tenia el mismo problema, queria acceder a una base de datos (o mejor dicho una tabla contenida en un archivo dbf), pero no necesitaba tener el Dbase IV para poder abrirlo y modificarlo, si no por un dataset en Visual Studio 2005 (utilizo Visual Basic), y enseguida te pongo mi ejemplo:

    Private path As String = My.Application.In fo.DirectoryPath + "\DatosDBase\"
        Private odbcCon As New Data.Odbc.OdbcConnection()
        Private dsTabla As New Data.DataSet()
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Try
                Me.odbcCon.ConnectionString = "Dsn=dBASE;defaultdir=" + Me.path + ";driverid=277;fil=dBASE IV;maxbuffersize=2048;pagetimeout=5 DataSource=" + Me.path + "PTMOS.dbf"
                Me.odbcCon.Open()
            Catch ex As Exception
                MsgBox("Error " + ex.Message)
            End Try
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                Dim da As New Data.Odbc.OdbcDataAdapter("SELECT * FROM PTMOS", Me.odbcCon)
                da.Fill(dsTabla)
                Me.DataGridView1.DataSource = dsTabla.Tables(0)
            Catch ex As Exception
                MsgBox("Error al llenar los datos" + ex.Message)
            End Try
        End Sub


    Si te fijas, en el evento load del formulario cargo la conexion con un objeto odbcConnection y ahi mismo la abro, tengo un boton 'Button1' donde cargo en un control 'DataGridView' el dataTable que obtengo de llenar con un adaptador 'da' el dataset 'dsTabla', espero y esta información te sirva de mucho, porque a mi si!!
    jueves, 3 de abril de 2008 18:15
  • Amiguito (Javier Conesa), si no tienes ni idea que es un archivo DBF no deberias de opinar. Leer texto de personas que solo se quieren lucir quita el tiempo a quienes buscan una verdera y pronta solucion a sus preguntas. En este tipo de foros las personas como tu se queman solas porque simplemente muestran su ignorancia, lastima de titulos o estudios que dices tener. Los archivos DBF son archivos de base de datos tipo Xbase (dbase, Clipper y claro que tienen estructura) se trata de una arquitectura muy robusta en cuanto a bases de datos se refiere y creeme que pocas en la actualidad pueden siquiera compararse con ella.

     

    Para poder utilizarlos mediante aplicaciones Visual Baisc te aconsejo establecer una conexion tipo ODBC (revisa las referencias y ejemplos al tema en la biblioteca MSDN)  una vez establecida la conexion todo lo demas lo podras utilizar de la misma forma que con las tablas de access que por defecto utiliza VB(altas, bajas, cambios, consultas, browser, list, etc), lo mismo aplica para cualquier otro tipo de base de datos que requieras utilizar con VB.

     

     

    sábado, 26 de abril de 2008 0:34
  •  Juan Hdez M. Escribió:

     

    Amiguito (Javier Conesa), si no tienes ni idea que es un archivo DBF no deberias de opinar. Leer texto de personas que solo se quieren lucir quita el tiempo a quienes buscan una verdera y pronta solucion a sus preguntas. En este tipo de foros las personas como tu se queman solas porque simplemente muestran su ignorancia, lastima de titulos o estudios que dices tener. 

     

     

    Amiguito Juan Hdez M...

     

    Por favor perdoname por con conocer en profundidad como se estructura un archivo DBF.

     

    Tu al parecer si conoces bien el dato... no se si será porque tienes la torta de años a tus espaldas y por eso sabes de ternlogias tan anticuadas, o siemplemente porque tu estupidez te haga seguir trabajando con eso.

     

    Sinceramente gente como tu hace que a veces de asco contestar en los foros.

     

    Aqui estamos para escribir libremente e intentar ayudar en lo que buenamente podemos, no para soportar a estupidos como tu. Si no te gustan las respuestas... colabora tu con el foro un poco si crees que lo puedes hacer mejor.

     

    Bueno por lo menos este hilo servira para reportarlo a Microsoft, a ver si de una vez por todas nos hacen caso con el tema del moderador para el foro.

     

    Un saludo campeon

    sábado, 26 de abril de 2008 6:35
    Moderador
  •  

    Relax....

     

    Juan Hndez... Javier sólo ha intentado aportar un granito de arena en el hilo con su respuesta, en mi opinión es bueno intentar ayudar, aunque a veces se acierte más que otras. No es un foro de gurús, es un foro de gente que intenta ayudar en base a su experiencia y que puede herrar en el tiro

     

    Javier... no hace falta estar entrado en años para conocer un DBF ni es tan anticuado, hay muuuuuchas personas que continuan trabajando con foxpro

     

    todos... estamos trabajando en cómo poder moderar los foros, éstos son una herramienta fundamental en el día a día de mucha gente y no queremos equivocarnos en una "política de moderación" ni en que rol ha de tener un "moderador" ni que persona ha de serlo. Además esta por aterrizar la nueva versión de los foros desde MIcrosoft Corporación y no tenemos muchos detalles sobre como tienen planificada esta parte (si...llevamos meses diciendo que va a llegar una nueva versión en los foros, pero es lo que nos dicen a nosotros Smile ).

     

    Solo puedo decir que no nos hemos olvidado...

     

    Saludos y Gracias

     

    David Salgado

    Development Evangelist

    Microsoft Ibérica

    lunes, 28 de abril de 2008 8:50
  •  David Salgado Escribió:

     

    Javier... no hace falta estar entrado en años para conocer un DBF ni es tan anticuado, hay muuuuuchas personas que continuan trabajando con foxpro

     

     

    Lo se David, lo se.

     

    Es más una mera desesperación por levantarte un sabado por la mañana y encontrarte este percal, que una critica constructiva bien realizada, pero a veces cuando llegan estas cosas y no has tenido un buen dia te hacen cambiar el chip en un plan un poco destructivo.

     

    Desgracidamente no es la primera vez ni la ultima en la que va a ocurrir algo parecido.

     

    En mi opinion, el que no se modere adecuadamente comentarios de este tipo a veces nos quitan las ganas de seguir respondiendo a los que habitualmente lo hacemos.

     

    Se agradece tu intención y tomo buena nota de que se tienen muy encuenta los hilos que de vez en cuando os notificamos

     

    Un saludo.

    lunes, 28 de abril de 2008 9:05
    Moderador
  • Global dbsPaso As Database 'Para la tabla de paso
    Global Acces2   As Database

     

        Set dbsPaso = OpenDatabase(App.Path + "\PASO_REPORTES.mdb")
        Set Acces1 = dbsPaso.OpenRecordset("Paso")
        Acces1.AddNew

     

        Set Acces2 = MiBase.OpenRecordset("SELECT GLOSA FROM BODEGA.DBF WHERE COD_BOD='" + ListaDeRebajesDeProductos.Data1.Recordset("COD_BOD") + "'")
        If Acces2.BOF = False Then Acces1("BODEGA") = Acces2("GLOSA"): Acces2.Close
        Acces1("COD_PAS") = ListaDeRebajesDeProductos.Data1.Recordset("COD_PAS")
        Acces1("COD_EST") = ListaDeRebajesDeProductos.Data1.Recordset("COD_EST")
        Acces1("COD_NIV") = ListaDeRebajesDeProductos.Data1.Recordset("COD_NIV")

     

     

    bueno aqui les dejo una pequeña porcion de codigos sobre DBF en Visual...

     

    DATO : conozco muy bien DBF , ya casi 15 años que trabajo con ellos en casi todos los ambientes..DOS y ambientes visuales y nunca han dejado de sorprenderme de su gran capacidad como base de datos, tambien trabajo mucho tambien con SQL, Oracle y otros sinceramente los DBF no tienen nada que envidiarles a los grandes motores de bases de datos, inclusivo su costo es bastante mas economico...jajaja...pero en fin.

     

    ...y con respecto a moderadores, debemos tratar de aprender de ser nosotros mismos los que nos controlemos e intentar ser tolerantes, ademas me parece un poco injusto tener alguien o algo que decida si los que escribimos es bueno,malo,etc para cualquiera de uds.... muchos son profesionales otros no tanto y asi...

     

    ..."todos los dias se aprende algo nuevo"...decia un profesor que me enseña ingles...

     

    bueno espero los ejemplos hayan servido de algo.

     

    Atte.

    Un Amigo...Saludos

    jueves, 15 de mayo de 2008 22:14
  • Hola Eder... utilice tu codigo que has puesto aqui.... ahora mi duda es... como puedo relacionar las tablas dbf... y hacer consultas sobre ellas... poner llaves primarias.. etc etc... t agradeceria mucho...

     

    viernes, 10 de octubre de 2008 9:14
  •  Jsc_23 Escribió:
    Hola Eder... utilice tu codigo que has puesto aqui.... ahora mi duda es... como puedo relacionar las tablas dbf... y hacer consultas sobre ellas... poner llaves primarias.. etc etc... t agradeceria mucho...

     

     

    Mira, como ya se ha mencionado en este foro, los archivos dbf tienen una estructura compleja de almacenamiento de datos, y por lo tanto, al igual que los mdb (de Access) necesitan de una interfaz para poder hacer relaciones, ahora bien, lo que te recomiendo es que utilices alguna de estas interfaces, ya se han mencionado algunas: Clipper, FoxPro, DBase, etc., lo mas recomendable claro, es que migres a una nueva tecnología, como MySQL, SQL Server, Oracle, etc., pero si no puedes son las recomendaciones que yo te doy, ahora, al poner llaves primarias a las tablas, y hacer las relaciones, debes tener cuidado con tus dataset en memoria, lo que te recomiendo hacer (despues de que establezcas tus relaciones en uno de los programas que te mencioné) es que utilices DataSet's tipados, para que tengas un mejor control sobre tus datos.

     

    Espero y te sirva de algo mis comentarios.

     

    No soy experto, pero pronto lo seré, jaja.

    lunes, 20 de octubre de 2008 19:54
  • hace un tiempo tuve la necesida de  abrir tablas libres de vfp en vb y lo hice de la siguiente manera:

     

    With base
            .ConnectionString = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=\\server;exclusive=no;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=YES"
            .ConnectionTimeout = 10
    End With

     

    ya con ello estas conectado a la tabla.

     

    a mi me funciono, pude hacer querys, altas, modificaciones y marcar los registros como eliminados.

     

    lo que no pude hacer fuu pack sobre la .dbf

     

    saludos.

    miércoles, 14 de enero de 2009 20:41
  • A mi me sirvio este codigo...
    Saludos



    Option Explicit

    ' Para probar usando controles ligados al recordset
    Private sBase As String             ' Nombre de la base de datos
    Private sBuscar As String
    Private con As Integer
    Private dialogResult As Integer
    ' Objetos para acceder directamente a la base usando código
    Private cnn As adodb.Connection
    ' Si se declara con WithEvents, tenemos acceso a los mismos eventos que
    ' con el ADO DataControl
    Private WithEvents rst As adodb.Recordset

     


    Private Sub Form_Load()
        ' Asignar el nombre de la base de datos
       
        ' Crear los objetos
        Set rst = New adodb.Recordset
           
        sBase = "D:\vc++\CA_TICKET_TEMP.DBF"

        Set cnn = New adodb.Connection
        With cnn
        'SourceType=DBF;SourceDB" & sBase & ";"
            .ConnectionString = "Driver={Microsoft Visual FoxPro Driver};Provider=MSDASQL.1; Presist Security Info=FALSE;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & sBase & ";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
            .Open
        End With
       
            sBuscar = "SELECT * FROM CA_TICKET_TEMP"
        Set rst = cnn.Execute(sBuscar)
       
           
            For con = 0 To rst.Fields.Count - 1
                  dialogResult = MsgBox(rst.Fields.Item(con), vbExclamation, "var...")
            Next
           
           
           
                    For con = 0 To rst.Fields.Count - 1
                dialogResult = MsgBox(rst.Fields.Item(con).Name, vbExclamation, "var...")
            Next
        cnn.Close
       
        'rst.Open "SELECT * FROM Table1", cnn, adOpenDynamic, adLockOptimistic


    End Sub

    Private Sub Form_Unload(Cancel As Integer)
        On Local Error Resume Next
       
        rst.Close
        cnn.Close
       
        Set rst = Nothing
        Set cnn = Nothing
       
        Err = 0
       
        Set fADO = Nothing
    End Sub

     

    domingo, 10 de mayo de 2009 15:19