none
Connexion à une base de données dbf (libreoffice) RRS feed

  • Question

  • Bonjour,

    J'ai un développement fait pour une base accès en 32 bits qui tourne et est incompatible avec l'installation d'Access 64 bits récent.

    J'ai pensé utiliser Libreoffice qui permet de gérer des based odb (j'avais écrit dbf par erreur) mais je ne trouve pas comment m'y connecter avec VN.Net 

    Quelqu'un met-il m'aider.

    J'aimerais continuer avec ADO qui m'est familier, mais, peut-être est-il indispensable de passer par ado.net (?).



    MCh




    • Modifié C Maurice mercredi 13 septembre 2017 16:52
    mercredi 13 septembre 2017 06:04

Réponses

  • J'ai trouvé le code ci-joint qui tourne en 64 bit avec la base Libreoffice.

    Par contre, l'intellisence ne fonctionne pas correctement ce qui ne m'aide pas pour la programmation. 

    Option Compare Text
    Option Explicit On
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            OpenDatabase()
        End Sub
        Sub Trace(ByVal T As String)
            'Log de l'activité et messages
            If T = "" Then Exit Sub
            Static mT As String
            If mT = T Then Exit Sub
            mT = T
            T = Format(TimeOfDay, "H:mm:ss") & " : " & T
            tLog.Text = Strings.Left(T & vbCrLf & tLog.Text, 5096)
            Application.DoEvents()
        End Sub
        '********************************************************************************************************
        '   Function to open the database
        '********************************************************************************************************
        Sub OpenDatabase()
            Dim oDB As Object, oBase As Object
            Dim oStatement As Object
            Dim rSQL As String
            Dim oRequete As Object
            Dim oServiceManager As Object, CreateUnoService As Object
            Dim i As Integer
    
            'Création instance Open office
            oServiceManager = CreateObject("com.sun.star.ServiceManager")
            CreateUnoService =
            oServiceManager.createInstance("com.sun.star.sdb.DatabaseContext")
    
            'Indique le nom de la base
            Dim Fichier As String
            Fichier = "file:///E:/MaBase.odb"
            oDB = CreateUnoService.getByName(Fichier)
    
            'Connection
            oBase = oDB.getConnection("", "")
            oStatement = oBase.createStatement
    
            'Création requète
            rSQL = "SELECT ""NOM"" FROM ""BD1"" "
            oRequete = oStatement.ExecuteQuery(rSQL)
    
            'Affichage du résultat de la requête dans les cellules Excel
            If Not IsNothing(oRequete) Then
                With oRequete
                    While oRequete.Next
                        Trace(oRequete.getString(1))
                    End While
                End With
            End If
    
            oRequete.Close
        End Sub
        Sub CloseDatabase(maConnexion)
            maConnexion.close
            maConnexion.dispose
        End Sub


    MCh




    • Modifié C Maurice mercredi 13 septembre 2017 19:01
    • Marqué comme réponse C Maurice jeudi 14 septembre 2017 14:04
    mercredi 13 septembre 2017 17:20

Toutes les réponses

  • Bonjour C Maurice,

    Vous devrez utiliser ADO.NET effectivement pour la connexion, vu que VB.NET tourne sur le plateforme .Net. Tout d'abord pour la chaîne de connexion, utilisez le site connectionstrings.com. Ce qui donnerai  avec ADO.NET :

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db\db.dbf;Extended Properties=dBASE IV;User ID=Admin;Password="


    N'oubliez pas de changer le chemin vers votre source de données (remplacer c:\db\db.dbf par votre chemin vers votre fichier). Une fois que vous aurez initialisé une connexion OleDb avec ce fichier, vous pourrez utiliser les classes et méthodes ADO.NET standards pour lire et écrire des données.

    im ConnectionString As String
     
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\;Extended Properties=dBase IV"
    Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)
    dBaseConnection.Open()
     
    Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM dbase", dBaseConnection)
    Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(CommandBehavior.SequentialAccess)
     
    While dBaseDataReader.Read
        TextBox1.Text = (dBaseDataReader("Column1").ToString)
        TextBox2.Text = (dBaseDataReader("Column2").ToString)
        TextBox3.Text = (dBaseDataReader("Column3").ToString)
    End While
     
    dBaseConnection.Close()

    Vous trouverez toutes les classes et méthodes à utiliser via le MSDN.

    Cordialement,

    mercredi 13 septembre 2017 08:18
  • Merci pour la réponse.

    J'ai fait une erreur : ce n'est pas dbf mais odb pour l'extension.

    Jet 4.0 ne tourne pas en 64 bits. C'est mon problème.

    Je vais essayer la solution proposée dans le lien que vous m'avez envoyé.

    Mais je ne suis pas sûr que ça n'entre pas en conflit avec la version jet 4.0 dont j'ai besoin avec mon appli.

    Je ferai l'essai sur un autre PC car je ne peux pas risqué de bloquer mon application.

    Merci.

    Jet for Access, Excel and Txt on 64 bit systems


    MCh


    • Modifié C Maurice mercredi 13 septembre 2017 16:57
    mercredi 13 septembre 2017 16:57
  • J'ai trouvé le code ci-joint qui tourne en 64 bit avec la base Libreoffice.

    Par contre, l'intellisence ne fonctionne pas correctement ce qui ne m'aide pas pour la programmation. 

    Option Compare Text
    Option Explicit On
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            OpenDatabase()
        End Sub
        Sub Trace(ByVal T As String)
            'Log de l'activité et messages
            If T = "" Then Exit Sub
            Static mT As String
            If mT = T Then Exit Sub
            mT = T
            T = Format(TimeOfDay, "H:mm:ss") & " : " & T
            tLog.Text = Strings.Left(T & vbCrLf & tLog.Text, 5096)
            Application.DoEvents()
        End Sub
        '********************************************************************************************************
        '   Function to open the database
        '********************************************************************************************************
        Sub OpenDatabase()
            Dim oDB As Object, oBase As Object
            Dim oStatement As Object
            Dim rSQL As String
            Dim oRequete As Object
            Dim oServiceManager As Object, CreateUnoService As Object
            Dim i As Integer
    
            'Création instance Open office
            oServiceManager = CreateObject("com.sun.star.ServiceManager")
            CreateUnoService =
            oServiceManager.createInstance("com.sun.star.sdb.DatabaseContext")
    
            'Indique le nom de la base
            Dim Fichier As String
            Fichier = "file:///E:/MaBase.odb"
            oDB = CreateUnoService.getByName(Fichier)
    
            'Connection
            oBase = oDB.getConnection("", "")
            oStatement = oBase.createStatement
    
            'Création requète
            rSQL = "SELECT ""NOM"" FROM ""BD1"" "
            oRequete = oStatement.ExecuteQuery(rSQL)
    
            'Affichage du résultat de la requête dans les cellules Excel
            If Not IsNothing(oRequete) Then
                With oRequete
                    While oRequete.Next
                        Trace(oRequete.getString(1))
                    End While
                End With
            End If
    
            oRequete.Close
        End Sub
        Sub CloseDatabase(maConnexion)
            maConnexion.close
            maConnexion.dispose
        End Sub


    MCh




    • Modifié C Maurice mercredi 13 septembre 2017 19:01
    • Marqué comme réponse C Maurice jeudi 14 septembre 2017 14:04
    mercredi 13 septembre 2017 17:20
  • Bonjour C Maurice,

    Ce code résout-il votre problème ?

    Cordialement

    jeudi 14 septembre 2017 10:25
  • Bonjour,

    Il résout une partie du problème, à savoir la possibilité de programmer en 64 bit.

    Je vais rechercher à avoir une meilleur intégration à l'IDE car je n'ai pas accès à l'intellisence avec ce code.

    Je me rends compte que j'ai de grosse lacunes avec la gestion des bases de données.

    Je vais essayer de m'informer.

    Je marque le problème comme résolu.


    MCh

    jeudi 14 septembre 2017 14:02