Meilleur auteur de réponses
Connexion à une base de données dbf (libreoffice)

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
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
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,
-
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
-
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
-
-
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