IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Lier des tables MySQL dans Access


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Lier des tables MySQL dans Access
    Bonjour,

    J'ai créé un petit programme pour obtenir la liste des tables d'une base de données MySQL et les lier dans Access. Cela marche très bien hormis pour les tables dont le nom comporte plus de 17 caractères. Lorsque j'essaie de la lier, mon application Access se plante. Quelqu'un a-t-il déjà rencontré ce problème ? Ou faut-il que j'envisage de renommer mes tables.

    Pour info, voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    '------------------------------------------------------------
    ' Accueil
    '
    '------------------------------------------------------------
    Function Accueil()
    On Error GoTo Accueil_Error
     
    Dim strDBCursorType As String
    Dim strDBLockType As String
    Dim strDBOptions As String
    Dim db As DAO.Database
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Long
     
    strDBCursorType = adOpenDynamic     'CursorType
    strDBLockType = adLockOptimistic    'LockType
    strDBOptions = adCmdText            'Options
     
    Set db = CurrentDb
     
    Set cn = New ADODB.Connection
    cn.Open ConnectionString()
     
        With cn
            .CommandTimeout = 0
            .CursorLocation = adUseClient
        End With
     
        Set rs = New ADODB.Recordset            'Création d'un record set
        strSQL = "SHOW TABLES FROM " & DatabaseName() & ";" 'Récupération de la liste des tables de la base MySQL
     
        rs.Open strSQL, cn, strDBCursorType, strDBLockType, strDBOptions
     
    If rs.EOF Then
       GoTo ExitSub
    Else
        Do While Not rs.EOF
            If TableExiste(rs(0)) Then        'On supprime la table si elle existe déjà
                db.TableDefs.Delete (rs(0))
            End If
            If Left(rs(0), 2) <> "v_" Then    'Je ne lie pas les vues
                Lier_table db, rs(0), rs(0)
            End If
            rs.MoveNext
        Loop
    End If
     
    ExitSub:
     
    Set rs = Nothing
    Set cn = Nothing
    Set db = Nothing
     
    Application.RefreshDatabaseWindow ' Actualisation de la fenêtre base de données
     
    On Error GoTo 0
    Exit Function
     
    Accueil_Error:
        MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
     
    End Function
     
     
    '------------------------------------------------------------
    ' Lier_table
    '
    '------------------------------------------------------------
    Function Lier_table(db As DAO.Database, strSourceTable As String, strTable As String)
     
        Dim td As DAO.TableDef
     
        Set td = db.CreateTableDef(strTable)    ' Création nouvelle définition de table
        td.Connect = ConnectDAO()      ' Chaîne de connexion ODBC pour DAO
        td.SourceTableName = strSourceTable      ' Nom de la table source
        db.TableDefs.Append td      ' Ajouter à la collection
     
        Set td = Nothing
     
    End Function

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 349
    Points : 23 813
    Points
    23 813
    Par défaut
    As-tu essayé de faire le link à la main via Données Externes ?

    Es-tu sur que c'est parce qu'il y a plus de 17 caractères, pas que c'est parce qu'il y a un caractère que Access ne digère pas ?

    Enfin as-tu vérifié si tu utilises la dernìère version du pilote ODBC pour MySQL ?

    A+

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de vous intéresser à mon problème. J'utilise la version 5.1 du driver (la version 32 bits). Quand je fais la manip à la main, ça fait la même chose. Par ailleurs, j'ai des tables avec des blancs et des accents (je sais, ça n'est pas terrible) et les tables avec un nom court fonctionnent (en manuel ou en VBA). Le problème n'est peut-être pas lié à la taille du nom mais c'est tout ce que j'ai pu identifié comme élément discriminant. Mais bon, si personne d'autres n'a jamais rencontré le problème, je vais peut-être devoir renommer mes tables. J'aurais juste voulu m'épargner un peu de boulot.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 349
    Points : 23 813
    Points
    23 813
    Par défaut
    Je ne connais pas MySQL mais cela marche sur Oracle donc au lieu de renommer les tables dans ta BD, peut-être pourrais-tu créer une vue sur ces tables, un truc du genre select * from taTable à qui tu donnerai un nom plus court.

    Tu pourrais peut-être aussi poser la question sur un forum MySQL.

    A+

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Oui, ça peut être un idée. Je vais y réfléchir et faire quelques test plus avant pour mieux cerner le problème. Merci de ton aide en tout cas.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé de créer une vue et de la lier mais j'obtiens une erreur ODBC (3146). J'ai installer la version 64 bits d'Office et la version 64 bits du driver ODBC. J'ai essayé de communiquer avec la base distante en ADO au lieu d'ADO. Rien n'y fait. Je crois finalement que ça me prendra moins de temps de raccourcir le nom de mes tables. J'ai d'ailleurs commencé. Merci pour votre aide quand même.

Discussions similaires

  1. [AC-2003] Lier des Vues MySql dans Access via ODBC
    Par njac74 dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/05/2009, 17h36
  2. importer des tables SAS dans ACCESS
    Par pierre24 dans le forum SAS Base
    Réponses: 1
    Dernier message: 27/08/2008, 08h48
  3. VBA lier une table Excel dans Access
    Par darkspoilt dans le forum VBA Access
    Réponses: 10
    Dernier message: 21/05/2007, 15h33
  4. Lier des tables MySQL / numérotation auto
    Par alfigor dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/05/2006, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo