Gestion BD MySQL depuis Excel

Philippe

XLDnaute Occasionnel
Bonsoir à tous,

j'avais fait il y a quelques années une application de gestion d'agenda de 10 médecins d'un cabinet médical interfacé avec le fichier clientèle. Ca tourne sous Excel et la BD est sous Accès (11 tables au total). On doit passer sous MySQL car la table "clientèle" arrive à plus de 50.000 entrées et nous allons bientôt arriver à saturation (65535...)
De plus Accès gère assez mal l'utilisation simultanée de 12 postes (les 10 médecins + 2 secrétaires) et de ce fait l'appli qui tourne parfaitement quand peu de postes sont connectée (par exemple tard le soir), devient assez lente dans la journée quand tout le monde est dessus. Bref, la décision est prise on migre sous MySQL, sauf que je suis loin d'être un pro et que j'ai besoin de votre aide pour me connecter à mySQL.
En clair:

sous Accès je fais ça depuis Excel
-------------
Public vBasededonnees As New ADODB.Connection
Public vdonnées As New ADODB.Recordset
Public vTable As String
Public vsource As String

vTable = 'DocteurX'
vsource = 'adresse le ma BD sur le serveur'
vSQL='ce que j'ai à dire en SQL..."

vBasededonnees.Open "provider=microsoft.jet.oledb.4.0;" & "persist security info=false;" & "data source=" & vsource
vdonnées.Open vSQL, vBasededonnees, adOpenStatic, adLockReadOnly

vdonnées.Close
vBasededonnees.Close
----------------
Comment faire pour avoir le même résultat sous MySQL ? (connector-ODBC est installé sur les postes clients)

Désolé pour le côté "merci de me donner une réponse toute cuite" mais ça urge vraiment et mes recherches rapides sur le net ne m'ont pas permis d'aboutir.

Un grand merci d'avance à ceux qui pourront m'aider.
Cordialement

Philippe
 
Dernière édition:

Philippe

XLDnaute Occasionnel
Re : Gestion BD MySQL depuis Excel

Bonjour Patoq,
j'ai déjà consulté ce lien mais il ne m'apporte pas les réponses dont j'ai besoin, en fait je n'ai pas de souci avec les requêtes SQL, ce dont j'ai besoin c'est la méthode pour me connecter à la BD MySQL qui est sur le serveur de l'entreprise...
Je pense que ça doit être assez simple mais je n'ai pas les infos ( équivalent pour MySQL du ""provider=microsoft.jet.oledb.4.0;" etc... utilisé pour acces)

Merci d'avance pour d'autres idées

Philippe
 

Philippe

XLDnaute Occasionnel
Re : Gestion BD MySQL depuis Excel

Bon, j'ai pas mal avancé, et la connexion à la BD et sa lecture se fait ainsi:

Code:
Public bd As New ADODB.Connection
Public enr As New ADODB.Recordset


Sub chargement()

chaine = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=connexion_excel;USER='root';PASSWORD='';OPTION=3;"
bd.Open chaine

enr.activeConnection = bd

li = 16
col = 5
For x = 1 To 5

  With enr
    .CursorLocation = adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open "SELECT * FROM table_test;"
  End With

Cells(li + x, 5) = enr("id")
Cells(li + x, 6) = enr("nom")
Cells(li + x, 7) = enr("prenom")
Cells(li + x, 8) = enr("DN")
Cells(li + x, 9) = enr("commentaire")

enr.MoveNext
enr.Close
Next
End Sub


En revanche un problème subsiste, il vient sans aucun doute de mon code mais je ne vois pas où...
Il m'affiche 5 fois de suite la 1ère ligne de la BD !

Si quelqu'un peut me suggérer d'où vient le problème ça serait sympa

Merci d'avance.
Philippe
 

mutzik

XLDnaute Barbatruc
Re : Gestion BD MySQL depuis Excel

bonsoir

essaie (sans garantie car non testé)

enr.activeConnection = bd

li = 16
col = 5


With enr
.CursorLocation = adUseServer
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "SELECT * FROM table_test;"
End With

For x = 1 To 5
Cells(li + x, 5) = enr("id")
Cells(li + x, 6) = enr("nom")
Cells(li + x, 7) = enr("prenom")
Cells(li + x, 8) = enr("DN")
Cells(li + x, 9) = enr("commentaire")

enr.Close
enr.MoveNext
Next

End Sub
 

Philippe

XLDnaute Occasionnel
Re : Gestion BD MySQL depuis Excel

Merci pour ta réponse Mutzik,

j'avais déjà essayé cette solution mais dans cet ordre VBA renvoie un message d'erreur lors du MoveNext : "action impossible sur un objet fermé"...

D'autres idées ?

A+
Philippe
 

Philippe

XLDnaute Occasionnel
Re : Gestion BD MySQL depuis Excel

Bon eh bien j'ai fait comme ça:

Code:
Public bd As New ADODB.Connection
Public enr As New ADODB.Recordset



Sub chargement()

chaine = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=connexion_excel;USER='root';PASSWORD='';OPTION=3;"
bd.Open chaine

enr.activeConnection = bd

li = 16
col = 5
For x = 1 To 5

  With enr
    .CursorLocation = adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open "SELECT * FROM table_test WHERE id=" & x & ";"
  End With

Cells(li + x, 5) = enr("id")
Cells(li + x, 6) = enr("nom")
Cells(li + x, 7) = enr("prenom")
Cells(li + x, 8) = enr("DN")
Cells(li + x, 9) = enr("commentaire")

enr.Close
Next
End Sub

et ça roule

A+ pour d'autres questions

philippe
 

Philippe

XLDnaute Occasionnel
Re : Gestion BD MySQL depuis Excel

Non, ça ne peut pas marcher car lorsque tu lances l'instruction enr.open "select...", si enr est déjà ouvert, ça génère un message d'erreur 'objet déjà ouvert, etc...' dès le second tour de la boucle.
Ma solution fonctionne mais n'est absolument pas satisfaisante sur le plan intellectuel dans la mesure où je ne fais que contourner le problème, pourquoi movenext ne marche pas ? Car si par exemple j'ai besoin de remplir une listbox avec les données de ma BD, j'aurai impérativement besoin de passer à l'enregistrement suivant.

Je renouvelle ma demande d'aide !

A+
philippe
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch