OVH Cloud OVH Cloud

[VBA] Connexion à une base de donnée Visual Foxpro

5 réponses
Avatar
Thierry Euzenot
Bonjour,

J'ai besoin de me connecter à une base de donnée Visual Foxpro (toto.dbc) à
l'aide d'une routine VBA et ODBC, quelqu'un pourrait-il m'indiquer comment
faire et éventuellement savoir de quelles références j'ai besoin ???

Merci par avance :o)

5 réponses

Avatar
Clément Marcotte
Bonjour,

Tu peux toujours aller fouiller à partir de là. Il y a une section
FoxPro

http://msdn.microsoft.com/data/Default.aspx


en fouillant dans la section MDAC, on finit par trouver:


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/vfpodbcvisualfoxproodbcdriveroverview.asp



"Thierry Euzenot" a écrit dans le message de
news:
Bonjour,

J'ai besoin de me connecter à une base de donnée Visual Foxpro
(toto.dbc) à

l'aide d'une routine VBA et ODBC, quelqu'un pourrait-il m'indiquer
comment

faire et éventuellement savoir de quelles références j'ai besoin ???

Merci par avance :o)




Avatar
Thierry Euzenot
Merci pour l'info :o)

Bon, j'ai tout lu et j'ai fais deux essais... aucun ne fonctionne :o(

Pour information la table st2busi.dbc existe déjà puisque c'est la base de
notre logiciel de gestion commerciale...
D'autre part l'accès à cette table est faisable puisque par l'intermédiaire
de MSQUERY j'arrive à lire les données et à les incorporer à une feuille
Excel...
Pour info voici la capture de création à la volé de macro d'une requête via
MSQUERY :
------------------------------------------------------------
Sub Macro1()
' Macro enregistrée le 12/10/2004 par Thierry Euzenot

With Selection.QueryTable
.Connection = Array(Array( _
"ODBC;DSN=Visual FoxPro
Database;UID=;PWD=;SourceDB=F:Busi3SERVEURST2st2busi.dbc;SourceTypeÛC;
Exclusive=Non;BackgroundFetch=Oui" _
), Array(";Collate=Machine;Null=Oui;Deleted=Oui;"))
.CommandText = Array( "SELECT blablabla" ,,,,,,,,,,,,)
.Refresh BackgroundQuery:úlse
End With
End Sub


Voici donc les deux essais que j'ai fait en VBA pour accéder à la même base
de données...

Premier essai :
------------------------------------------------------------
Sub TestConnexion()

Dim WSODBC As Workspace
Dim Ds As Connection

On Error Resume Next
'Syntaxe
'Set workspace = CreateWorkspace(name, user, password, type)
Set WSODBC = CreateWorkspace("EspaceWork", "", "", dbUseODBC)

'Syntaxe
'Set Connection = Workspace.OpenConnection(Name, Options, ReadOnly, Connect)
Set Ds = WSODBC.OpenConnection("Conn1", dbDriverComplete, True, _
"ODBC;DATABASE=F:Busi3SERVEURST2st2busi;UID=;PWD=;DSN=Visual FoxPro
Database")

If Err.Number <> 0 Then
Message = MsgBox("Erreur N°" & Err.Number & " : " & Err.Description)
Else
MsgBox "Connection etablie"
End If

End Sub

------------------------------------------------------------
==> Résultat : Lorsque je lance la macro pas à pas arrivé au "Set Ds =..."
il m'ouvre une fenêtre de configuration de connexion me demandant le chemin
de la BDD (alors qu'il est indiqué dans la propriété Connect)... j'entre
donc le chemin vers la BDD ensuite arrivé à la fin, il me renvois une erreur
N°13 - incompatibilité de type...

Essai N°2 :
Le même mais en remplaçant DSN=Visual FoxPro Database par DSN=test selon les
instructions du site Microsoft fourni par Clément Marcotte.
==> Résultat il me renvoie une erreur N°3146 : ODBC -- l'appel à échoué

A signaler que sur le site microsoft dont parle Clément, la méthodologie est
donnée pour VB et non pour VBA...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/vfpodbcusingthevisualfoxproodbcdriverwithyourvisualbasicapplication.asp
Et là je n'ai pas réussi à modifier les propriété suivantes :
1.. Change the RecordsetType property to the following:
2 - Snapshot2.. Change the RecordSource property to the following:
customer3.. Change the DataSource property for the text box to the default
name for the Data control to the following:
data14.. Change the text box's DataField property to the following:
customer_id
Concernant Excel, ils ne parlent que d'un import via MSQUERY
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/vfpodbcaccessingvisualfoxprodatafromamicrosoftofficeapplication.asp





"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Tu peux toujours aller fouiller à partir de là. Il y a une section
FoxPro

http://msdn.microsoft.com/data/Default.aspx


en fouillant dans la section MDAC, on finit par trouver:



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/vfpodbcvisualfoxproodbcdriveroverview.asp




"Thierry Euzenot" a écrit dans le message de
news:
Bonjour,

J'ai besoin de me connecter à une base de donnée Visual Foxpro
(toto.dbc) à

l'aide d'une routine VBA et ODBC, quelqu'un pourrait-il m'indiquer
comment

faire et éventuellement savoir de quelles références j'ai besoin ???

Merci par avance :o)







Avatar
michdenis
Bonjour Thierry,


Voici un exemple avec une base MDB (access)

'----------------------------------
Dim CheminDeLaBase As String, NomBase As String
Dim Requête As String, Conn As String, Sh As Worksheet

CheminDeLaBase = ThisWorkbook.Path
NomBase = "Comptoir.mdb"
Set Sh = Sheets("Feuil1")

'La chaîne de connection
'Conn = "ODBC;DSN=MS Access Database;" & _
"DBQ=" & CheminDeLaBase & "" & NomBase & _
";DefaultDir=" & CheminDeLaBase & _
",BaseComptoir;DriverId(1;Exclusive=1;FIL=MS Access;" & _
"MaxBufferSize 48;PageTimeout=5;PWD=toto;ReadOnly=0;UID­min;"


'Ayant défini le dsn , on peut utiliser cette syntaxe réduite
'Le résultat sera le même... si on modifie l'emplacement de
'la base de donnée personnifier par "BaseComptoir", il faut
'aller dans ODBC du panneau de configuration et modifier
'le chemin.


Conn = "ODBC;DSNºseComptoir;" & _
"DriverId(1;Exclusive=1;FIL=MS Access;" & _
"MaxBufferSize 48;PageTimeout=5;PWD=toto;ReadOnly=0;UID­min;"


'la chaîne de la requête
Requête = "select * from fournisseurs"

With Sh.QueryTables.Add(Connection:=Array(Conn), Destination:=Sh.Range("A1"))
Sh.Range("A1").CurrentRegion.ClearContents
.CommandText = Array(Requête)
.Name = "xxxx"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
'-----------------------------------


Tu cherches autre chose ?



Salutations!



"Thierry Euzenot" a écrit dans le message de news:
Bonjour,

J'ai besoin de me connecter à une base de donnée Visual Foxpro (toto.dbc) à
l'aide d'une routine VBA et ODBC, quelqu'un pourrait-il m'indiquer comment
faire et éventuellement savoir de quelles références j'ai besoin ???

Merci par avance :o)
Avatar
Thierry Euzenot
"michdenis" a écrit dans le message de
news:
Bonjour Thierry,


Voici un exemple avec une base MDB (access)

'----------------------------------
Dim CheminDeLaBase As String, NomBase As String
Dim Requête As String, Conn As String, Sh As Worksheet

CheminDeLaBase = ThisWorkbook.Path
NomBase = "Comptoir.mdb"
Set Sh = Sheets("Feuil1")

'La chaîne de connection
'Conn = "ODBC;DSN=MS Access Database;" & _
"DBQ=" & CheminDeLaBase & "" & NomBase & _
";DefaultDir=" & CheminDeLaBase & _
",BaseComptoir;DriverId(1;Exclusive=1;FIL=MS Access;" & _
"MaxBufferSize 48;PageTimeout=5;PWD=toto;ReadOnly=0;UID­min;"


'Ayant défini le dsn , on peut utiliser cette syntaxe réduite
'Le résultat sera le même... si on modifie l'emplacement de
'la base de donnée personnifier par "BaseComptoir", il faut
'aller dans ODBC du panneau de configuration et modifier
'le chemin.


Conn = "ODBC;DSNºseComptoir;" & _
"DriverId(1;Exclusive=1;FIL=MS Access;" & _
"MaxBufferSize 48;PageTimeout=5;PWD=toto;ReadOnly=0;UID­min;"


'la chaîne de la requête
Requête = "select * from fournisseurs"

With Sh.QueryTables.Add(Connection:=Array(Conn),
Destination:=Sh.Range("A1"))

Sh.Range("A1").CurrentRegion.ClearContents
.CommandText = Array(Requête)
.Name = "xxxx"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
'-----------------------------------


Tu cherches autre chose ?



Salutations!


Heu... je pense que oui... mais je ne sais plus trop :o/

Je ne veux pas utiliser Query, ni afficher les valeurs de la table dans une
feuille Excel. Je veux me connecter à une table Visual Foxpro, aller y faire
des requêtes, récupérer des infos par le biais de Recordset et traiter ces
infos...

En clair, la gestion commerciale se fait sur un logiciel (acheté, Business
Soft pour ceux qui connaitraient) dont les tables sont du Visual FoxPro. En
parallèle j'ai développé une application Excel VBA de gestion de production
et planification des commandes et suivi livraisons. Cette application
utilise une base de donnée de type Acces 97 (.mdb)

Je souhaite aller récupérer les infos de commande dans la base Visual FoxPro
pour les comparer aux infos de production d'une base .mdb...

Aucun problème pour accéder à la base .mdb, j'utilise ADO et Microsoft Jet
4, voir l'exemple ci dessous :
------------------------------------------------------
'Définit le nom de la connexion
Public Conn As ADODB.Connection
'Définit le nom de la requête
Public Rst As ADODB.Recordset

Sub Toto()
'Procédure de connexion à la BDD
On Error Resume Next
Set Conn = New ADODB.Connection
With Conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers art_st2e.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With
If Err <> 0 Then
Message = MsgBox("Erreur N°" & Err.Number & " : " & Err.Description)
Exit Sub
End If

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set Rst = New ADODB.Recordset
Rsql = "SELECT * FROM calendrier WHERE caldatliv >= " & VarDate & " ORDER BY
caldatliv, calcli;"
Rst.Open Rsql, Conn, adOpenStatic, adLockReadOnly, adCmdText

If Rst.fiels("artcode") = "Blabla" Then action

End Sub
-----------------------------------------------------------

Maintenant ce que je souhaite faire, c'est la même chose sur une base de
donnée Visual FoxPro : Connexion à la BDD, Requête, résultats, etc.
Le tout sans passer par MSQuery !

Avatar
Thierry Euzenot
Yepeeeeeeeeeeeeeeeeeee !!!!!!!!!!!!!! Après 6 heures non stop à me creuser
les méninges et alors que j'allais laisser tomber je suis tombé sur un bout
de code qui paraissait louche tellement il était simple comparé à tout ce
que j'avais tenté...

Pour info je donne le lien car il semble couvrir pas mal de configs
différentes :
http://www.able-consulting.com/MDAC/ADO/Connection/ODBC_DSNLess.htm

Voici le résultat appliqué à ma configuration :
----------------------------------
Sub Test_Conn()

On Error Resume Next
Set Conn = New ADODB.Connection

Conn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceTypeÛC;" & _
"SourceDB=G:ProductionProjet VBAfoxprost2busi.dbc;" & _
"Exclusive=No"

If Err <> 0 Then
Message = MsgBox("Erreur N°" & Err.Number & " : " & Err.Description)
Exit Sub
End If

End Sub
-----------------------------------

Et le pire c'est que ça fonctionne !!!!!!!!!!!!!!!

Un grand merci à tout ceux qui m'ont répondu et apporté leur aide dans ma
recherche, sans vous, je n'aurais pas trouvé, même si votre aide fût
indirecte :o))))

Sur ce je rentre à la maison avec le sourire ^_^

P.S. : si dans mon bout de code il manque quelque chose, n'hésitez pas à me
le signaler !


"Thierry Euzenot" a écrit dans le message de
news:
Bonjour,

J'ai besoin de me connecter à une base de donnée Visual Foxpro (toto.dbc)
à

l'aide d'une routine VBA et ODBC, quelqu'un pourrait-il m'indiquer comment
faire et éventuellement savoir de quelles références j'ai besoin ???

Merci par avance :o)