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

Projets ADP Discussion :

Modification de liaison ODBC d'une base Access


Sujet :

Projets ADP

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut Modification de liaison ODBC d'une base Access
    Bonjour,


    Auparavant, j'avais une base Access fractionnée, avec une base de données frontale, en accde (de façon à ce que des personnes ayant uniquement le runtime installé puisse l'utiliser, et ne touche pas aux données directement), et une base dorsale qui contenait les données, comme toute base fractionnée en fait
    De ce fait, j'avais une base de "production", et une base de "développement", qui me permettait de faire évoluer la base, et lorsque le développement était "validé", je pouvais alors "publier mon dév, en l'enregistrant dans mon dossier de "production", et en écrasant ma base accde de production, pour mettre la dernière version.

    Depuis peu, j'ai enfin réussi à avoir un serveur MYSQL, où je peux avoir mes données, au lieu d'utiliser d'une base fractionnée.

    Sur ce serveur, j'ai 2 base : une base de TEST, et une base de PRODUCTION, qu'on va appeler base_TEST et base_PROD.

    Sur ces 2 bases, j'ai 2 comptes utilisateurs :
    - le compte admin, qui est le mien, où j'ai tous les droits (CREATE TABLE, ALTER TABLE, GRANT, UPDATE, INSERT, DELETE, etc...)
    - un compte utilisateur, où j'ai des droits un peu plus restreint (pas la possibilité de modifier la base et les tables, par contre, possibilité de faire des UPDATE, INSERT, DELETE, SELECT)

    Sur mon poste à moi, j'ai donc créé le lien ODBC dans ma base Access, avec mon compte admin, sur la base base_TEST, avec le lien ODBC que j'ai appelé dans ma source de données utilisateur "base_TEST DEV"
    Quand je vais dans ma base de TEST, je n'ai donc aucun souci.

    J'ai donc installé le lien ODBC sur le poste d'un utilisateur, avec un lien vers la base MYSQL avec le compte utilisateur (qu'on va appeler user), sur la base base_TEST, que j'ai aussi appelé dans ma source de données utilisateur "base_TEST DEV".

    Donc de ce fait, le lien ODBC créé dans Access sur mon poste et le poste de mon utilisateur a le même nom de source de données "base_TEST DEV", mais avec un compte différent.

    Je me suis dit "vu que mon nom de source utilisateur est le même, si je lui donne un accde de ma base de TEST, ça devrait marcher.."

    Ben, en fait non ça marche pas quand, de son poste, il essaye d'ouvrir le .accde de ma base de TEST, avec les liens qui pointe sur la même source de données "base_TEST DEV", au moment d'ouvrir un formulaire qui a besoin de données, ça me fait une erreur ODBC.

    Donc ma question est : est-ce dû au fait que la base Access est en ACCDE et du coup le lien ne fonctionne pas ? ou c'est juste parce que, même si mes bases ont le même nom, l'utilisateur utilisé sur mes 2 postes n'est pas le même ?
    Si c'est juste un problème d'utilisateur, je suppose qu'il y a la possibilité de changer ça en VBA ?

    j'espère que j'ai été clair dans ma question, et je vous remercie par avance de vos retours,
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    Je ferai les tests suivants sur ton poste de dev :
    1. Dans Windows, Test de ODBC compte Admin, pour valider que la connexion est possible
    2. Dans Windows, Test de ODBC compte User, pour valider que la connexion est possible
    3. Puis : Accde+Compte Admin, Pour savoir si un accde marche ?
    4. Puis : Accde+Compte Utilisateur, Pour savoir si un accde marche avec le bon compte ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Bonjour,


    Merci pour ton retour

    Alors les liens ODBC fonctionnent avec les 2 comptes.

    Et j'ai essayé sur mon poste les accde, ils fonctionnent bien dans les 2 cas. Mais j'ai l'impression que, vu que j'ai Access sur mon poste, l'utilisation d'un .accde n'a pas le même comportement qui a uniquement le runtime...
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    C'est hélas très possible.
    Tu peux simuler (imparfaitement mais quand même bon) le mode runtime avec un "vrai" Access en passant le paramètre /runtime à la ligne de commande.

    Ça ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call "C:\TonCheminVersAccess\MSACCESS.EXE" "X:\TonCheminVersTaBD\TaBD.accdb" /runtime
    Ça doit marcher avec un accde aussi.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Je vais faire le test.

    Par contre, je viens de m'apercevoir d'un autre truc : de mon côté, je travaille avec Access 2010, et du côté du poste où on doit utiliser la base, c'est du RunTime2013 d'Access en 64 bits. Du coup, la connexion ODBC n'utilise pas la même Connecteur.

    Du coup j'ai 2 questions :
    - si je prend des liens ODBC en 32 bits, j'aurai surement le même problème ?
    - Comment je pourrais faire, via une macro, pour changer les liens ODBC, en changeant uniquement ce qu'il faut au niveau de la connectique ODBC pour que ça fonctionne sur l'autre poste (car au final, le nom de ma base ODBC au niveau de la Source de données utilisateur est le même, c'est juste le connector ODBC (ou pilote ODBC) qui est différent, vu que c'est du 2013 64 bits) ?

    Merci pour ton retour
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    Désolé aucune idée.

    Je ne crois pas que Access stocke le nom du driver dans la chaîne de connexion, de mémoire il ne garde que le nom du DNS (le nom que tu as défini au moment de la création de la connexion, ex : BD_PROD) mais le changement de version peut peut-être poser des problèmes.
    Pour voir ce que Access utilise comme paramètre tu peux taper quelque chose comme :

    ? Curentdb.Tabledefs("TaTableLiee").connect [Enter].

    dans la fenêtre d'exécution immédiate.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Merci pour la commande, je vais regarder le résultat de cette requête

    Effectivement, ça me dit : "ODBC;DSN=NomBaseODBC;"

    Donc comme tu l'as dit, il ne garde pas le connecteur utilisé...Bizarre que ça fonctionne pas du coup..
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Re,


    En fait, je suis en train de regarder un tuto sur lequel j'étais déjà tombé, et ici :

    https://ledzeppii.developpez.com/odbc-access/#LIII-C

    Il y a cette requête :


    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
    Sub RegDB_mysql()
    Dim strDSN As String, strAttr As String, strODBCDrv As String
     
    ' Nom de la source de données ODBC
    strDSN = "ESSAI MySQL"
    ' Nom du pilote ODBC
    strODBCDrv = "MySQL ODBC 3.51 Driver"
    ' Attributs
    ' OPTION est spécifique à MySQL dans cet exemple
    strAttr = "SERVER=LZ2" & vbCr & "DATABASE=test" & vbCr & "OPTION=3" & vbCr & _
              "UID=Utilisateur" & vbCr & "PWD=MotDePasse"
     
    DBEngine.RegisterDatabase strDSN, strODBCDrv, True, strAttr
     
    End Sub
    Et comme tu peux le constater, on utilise la fonction RegisterDatabase où on utilise le nom du pilote ODBC et du coup ce que j'appelle "le nom du connecteur". Vu que le nom sous 201 n'est pas le même, si ça se trouve c'est à cause de ça que j'ai un souci.
    je vais voir si je peux faire une requête avec juste une table et si je peux récupérer cette valeur de mon poste déjà, voir ce que ça me renvoie.
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    De ce que j'en comprends c'est pour créer la connexion ODBC, si elle existe déjà avec les bons paramètres ce code ne semble pas nécessaire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    La connexion ODBC dans la source de données a été faite oui, mais pas dans la base Access sur le poste où j'installe mon accde.

    De ce que j'ai compris, cette requête permet de l'installer dans la base de registre, c'est pour ça que je comprend pas. Il y aurait une inscription dans la base de registre ? En fait, dans ma base Access de DEV, j'ai bien fait déjà au moins une fois le lien ODBC, mais sur le poste du client, je ne l'ai jamais fait.

    Au vu de ce que j'ai mis au dessus, est-ce qu'il faudrait pas la "créer" une première fois pour que ça fonctionne ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    À priori non, si une connexion ODBC existe sur le poste utilisateur et qu'elle porte le même "nom" access va s'en servir.
    J'ai plusieurs fois utilisé cela sur mon poste de dév avec une connexion vers DEV et un connexion vers PROD.
    Avant la mise en prod, je basculais sur la connexion PROD et je déployais sur mes postes clients qui eux aussi avait une connexion PROD.

    Peux-tu faire un test avec un vrai Access 64 bit au lieu du runtime ?
    Il est très difficile de débugger le runtime car on est complétement aveugle.

    Tu pourrais aussi essayer de rafraichir la liaison (en principe ce n'est pas nécessaire).
    Pour faire cela il suffit de faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentdb.tabledefs("TaTableLiee").refreshlink
    Attention parfois il fait supprimer le lien et le recréer car le RefreshLink passe des fois la table en mode "Lecture seule".

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Salut,


    Merci pour beaucoup pour ton aide.
    Le problème est que le poste où j'installe la base n'a pas Access et pas de licence (en gros faut que je passe par le service info pour installer Access sur le poste...c'est pas gagné )

    Je vais quand même essayer ton histoire de Refresh....

    Ce qui me turlupine vraiment, c'est que les noms des pilotes ODBC sont exactement les mêmes, pour ça que je comprend pas pourquoi ça marche pas..
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  13. #13
    Membre expert

    Homme Profil pro
    consultant développeur
    Inscrit en
    mai 2005
    Messages
    2 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 2 223
    Points : 3 523
    Points
    3 523
    Par défaut
    illight,

    32 bits ou 64 bits : il est important de choisir son camp ! Tu ne peux dévelppper en 32 bits et déployer tes utilisateurs en prod en 64 bits (les déclarations des API, les activeX ...).
    D'autant que le runtime 2013 32 bits est tout aussi gratuit que celui en 64 bits.

    Je pense aussi qu'il vaut mieux avoir des noms distinctifs pour les DSN selon la base cible. Et de toute façon il faut livrer les utilisateurs avec les bases correctement attachées dans leur contecte.

    CDLT
    "Always look at the bright side of life." Monty Python.

  14. #14
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Bonjour,


    Mon PC est sous 64 bits, et le poste en Windows 10 est aussi en 64 bits, donc ce côté-là, c'est bon normalement
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  15. #15
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Bonjour,


    On commence à me pousser à avancer sur ce projet (que j'avais mis en stand by temporairement).

    Je suis tombé sur ce tuto :

    https://ledzeppii.developpez.com/odbc-access/

    Grâce à ce tuto, j'ai essayé plusieurs méthodes pour redéfinir mon ODBC sur ma base accde :
    1ère méthode : modification du lien ODBC

    En me basant sur cette requête-là :


    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
    Sub ChgODBClink_DAO2()
    Dim strConn As String, db As DAO.Database, td As DAO.TableDef
    Dim strParts() As String, i As Integer
    Dim strTable As String, strUID As String, strPWD As String
    Dim errX As DAO.Error, strErrMsg As String
    Dim strCreateIdx As String, strUniqueRecord  As String
     
    strTable = "mysql_fournisseurs2"
    strUniqueRecord = "[N° fournisseur] ASC"
    strUID = "NvUtilisateur"
    strPWD = "NvMotDePasse"
     
    Set db = CurrentDb
    On Error Resume Next
    Set td = db.TableDefs(strTable)
    On Error GoTo 0
    If td Is Nothing Then
       strErrMsg = "La Table '" & strTable & "' est introuvable"
       GoTo QUIT
    End If
     
    ' Si la table est bien une table liée ODBC
    If td.Attributes And dbAttachedODBC <> 0 Then
       ' Crée un tableau des éléments de la chaîne de connexion ODBC actuelle
       strParts = Split(td.Connect, ";")
       ' recompose la chaîne de connexion ODBC
       For i = LBound(strParts) To UBound(strParts)
           If strParts(i) Like "UID=*" Then
              ' nouvel attribut UID
              strConn = strConn & "UID=" & strUID & ";"
     
           ElseIf strParts(i) Like "PWD=*" Then
              ' Nouvel attribut PWD
              strConn = strConn & "PWD=" & strPWD & ";"
     
           Else
              strConn = strConn & strParts(i) & ";"
           End If
       Next
       strConn = Left(strConn, Len(strConn) - 1)
       ' Modifie la propriété Connect avec la nouvelle chaîne de connexion ODBC
       td.Connect = strConn
       ' Met à jour la liaison
       On Error GoTo ERRH
       td.RefreshLink
       ' RefreshLink recrée la table liée.
       ' ==> on perd l'index unique si on en avait créé un.
       ' Ajout index clé primaire
       If Len(strUniqueRecord) > 0 Then
          strCreateIdx = "CREATE UNIQUE INDEX __uniqueindex " & _
                         "ON  [" & strTable & "] (" & strUniqueRecord & ") WITH PRIMARY"
          db.Execute strCreateIdx, dbFailOnError
       End If
     
    Else
       strErrMsg = "La Table '" & strTable & "' n'est pas une table liée ODBC"
    End If
     
    QUIT:
    Set td = Nothing
    Set db = Nothing
    If Len(strErrMsg) <> 0 Then MsgBox strErrMsg
    Exit Sub
     
    ERRH:
    strErrMsg = "Erreur N° " & CStr(Err.Number) & " : " & Err.Description
    Select Case Err.Number
        Case 3146, 3151, 3154, 3155, 3156, 3157, 3231, 3232, 3234, 3225, 3238, 3247, 3254
            strErrMsg = strErrMsg & vbCrLf & vbCrLf & _
               ">>> Erreurs complémentaires DAO :" & vbCrLf & _
               "======================"
            'Récupérations Erreur(s) driver ODBC via DAO
            For Each errX In DBEngine.Errors
                strErrMsg = strErrMsg & vbCrLf & Format(errX.Number, "00000") & " : " & errX.Description
            Next
    End Select
    Resume QUIT
    End Sub
    J'ai tenté de faire finalement une mise à jour de mes liens ODBC.
    Pour cette méthode-là, sur mon poste, ça a marché sans problème.

    Quand j'essaye sur un poste où il n'y a que le runtime, la macro me plante sur cette ligne :
    Par contre, comme un con, j'ai oublié de laisser le message d'erreur réel (et pas le message à la noix du runtime) => je referai un test lundi avec un vrai message d'erreur voir ce que ça donne.
    Donc la connexion fonctionne, mais au moment du rafrachissement du lien, ça marche pas.

    2e méthode : suppression de la table puis recréation table avec lien ODBC

    Dans la 2e méthode, je me suis basé sur la macro suivante :


    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
    Dim strConn As String, db As DAO.Database, td As DAO.TableDef 
     
    Set db = CurrentDb
    '  Chaîne de connexion
    strConn = "ODBC;" & _
              "DSN=ESSAI MySQL;" & _
              "UID=Utilisateur;PWD=MotDePasse"
    ' Création nouvelle définition de table
    Set td = db.CreateTableDef("mysql_fournisseurs2")
    ' Optionnel : Sauver mot de passe
    td.Attributes = td.Attributes Or dbAttachSavePWD
    ' Chaîne de connexion ODBC pour DAO
    td.Connect = strConn
    ' Nom de la table source
    td.SourceTableName = "fournisseurs2"
    ' Ajouter à la collection
    db.TableDefs.Append td
     
    Set td = Nothing
    set db=Nothing
    ' Actualiser fenêtre base de données pour que la nouvelle table apparaisse
    Application.RefreshDatabaseWindow
    En l'adaptant à ma sauce de cette manière :

    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
     
    strConn = "ODBC;DSN=NombaseODBC;UID=Utiliateur;PWD=password;"
    Set db = CurrentDb
    'On Error Resume Next
    'Set td = db.TableDefs(strTable)
    'On Error GoTo 0
    'If td Is Nothing Then
    '   strErrMsg = "La Table '" & strTable & "' est introuvable"
    '   GoTo QUIT
    'End If
    For Each oTblSource In db.TableDefs
        ' Ignore les tables system
        If (oTblSource.Attributes And dbSystemObject) = 0 And oTblSource.Name <> "USysApplicationLog" Then
            strTemp = strTemp & oTblSource.Name & "|"
        End If
    Next
    strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
    For i = 0 To UBound(strNomsTables)
            If TableExist(strNomsTables(i)) Then 'on vérifie si la table existe : si oui, on supprime et on la recrée avec le lien
                MsgBox strNomsTables(i)
                'supprime la table existante
                db.Execute "Drop Table [" & strNomsTables(i) & "]"
                'MsgBox "suppression table OK"
                ' Crée une nouvelle table dans la base de données courante
                Set oTbl = db.CreateTableDef(strNomsTables(i))
                'MsgBox "Création nouvelle table OK"
                ' Lie les deux tables
                oTbl.Connect = strConn
                oTbl.SourceTableName = strNomsTables(i)
                'MsgBox "lien OK"
                ' Ajoute la table à la base de données
                db.TableDefs.Append oTbl
                MsgBox "Ajout OK"
            End If
     
    Next
    Où, en gros, je supprime la table, et je la recrée avec le lien ODBC.

    => Du coup, par cette méthode, sur mon poste (donc où j'ai Access, ça fonctionne sans problème).
    Par contre, par le poste où j'ai un runtime, cette fonction plante à ce niveau-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.TableDefs.Append oTbl
    Alors évidemment, comme au dessus, j'ai oublié de mettre un message personnalisé pour avoir le numéro de l'erreur.


    Alors je voulais aussi fair ele test de la 3e méthode, en utilisant la fonction TransferDatabase, mais la personne avec qui je fais le test est partie, donc je ferai le test de cette méthode lundi.

    Mais déjà, avec tous les éléments, sauriez-vous me guider et me disant pourquoi les RefreshLink et la méthode Append ne fonctionne pas ? Est-ce dû au fait que c'est un exécutable, et du coup la table ne peut être recréée ?

    Je vous ferai part de mes résultats avec le vrai message d'erreur lundi.

    Merci d'avance si vous avez une idée.
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 602
    Points : 20 591
    Points
    20 591
    Par défaut
    Bonjour.

    Pour le Append je ne sais pas. Il est possible que le Rubtime ne le permette pas car cela change la structure de la DB. Quoi qu'apparement il tolère la suppression donc pas logique.

    Pour le RefreshLink, cela devrait fonctionner. C'était il y a longtemps avec une Access 2000 mais j'avais donné la possibilité à mon utilisateur de choisir sa BD dorsale car les disques n'étaient pas les mêmes d'un poste à un autre et le relinkage fonctionnait parfaitement.

    Tu peux simuler le mode runtime sur un "vrai" Access en mettant /runtime dans la ligne de commande de Access quand tu ouvres ta BD.
    Ce n'est pas parfait mais cela te donne généralement une bonne idée de ce qui marche et de ce qui ne marche pas.
    Ici de l'aide sur la ligne de commande :

    https://loufab.developpez.com/tutori...lignecommande/

    https://support.office.com/en-us/art...EAABAAA=Access

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Pour info, pour la première méthode, j'ai l'erreur 3151 : erreur de la connexion à la base ODBC.

    Pourtant, dans la source de données ODBC (dans le panneau d'admin), le test de connexion est OK, donc je comprend pas pourquoi ça marche pas
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  18. #18
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Re,


    J'ai essayé aussi avec transFertDataBase, j'ai le même problème, et la même erreur 3151.

    Je ne sais plus trop quoi faire pour faire cette foutue connexion ODBC.

    Quels tests je pourrais faire pour essayer de faire une connexion ? ais-je moyen de tester juste la connexion avec le pilote ODBC ?

    Information, que je crois ne pas vous avoir donné : dans l'administration des soucis ODBC, j'utilise le connecteur "MySQL ODBC 8.0 ANSI Driver". Je ne sais pas si ça a une importance, mais je préfère le préciser

    Et c'est le même connecteur qui est installé sur les postes où il n'y a que le runtime.
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  19. #19
    Expert confirmé Avatar de illight
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    septembre 2005
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2005
    Messages : 2 293
    Points : 4 181
    Points
    4 181
    Par défaut
    Bonjour,


    J'ai installé Access sur un des postes où j'ai la base de données avec le lien ODBC. Même en activaznt le gestionnaire des tables liées et en rafraichissant les liens, ça ne fonctionne pas et ça me dit "le lien ODBC a échoué".

    Du coup, je suis allé plus loin, et j'ai pris la base MySQL et essayé de faire le lien manuellement vers une table. Et là, j'ai enfin un message différent quand je sélectionne mon connecteur, et le message me dit :

    "La source de données (DSN) spécifiée présente une incompatibilité d'architecture entre le pilote et l'application".

    Ça explique surement pourquoi le changement de connexion via requête ne fonctionne pas. Par contre est-ce quelqu'un pourrait m'expliquer ce que ça veut dire exactement ? c'est la b ase MYSQL qui n'est pas dans la bonne version ? Ce n'est pas le bon connecteur ODBC ?

    je vais chercher en parallèle de toute façon : si je trouve la solution, je vous l'indiquerai ici.
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

Discussions similaires

  1. [AC-2007] connexion ODBC avec une base Access
    Par lemabs dans le forum Access
    Réponses: 1
    Dernier message: 24/12/2009, 09h08
  2. Réponses: 1
    Dernier message: 27/05/2008, 14h29
  3. Réponses: 4
    Dernier message: 15/01/2008, 17h36
  4. [ODBC] Utiliser une base de données Access sans les MFC
    Par Higestromm dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2005, 22h37
  5. Modification d'une base Access avec MySQL
    Par Wyatt dans le forum Administration
    Réponses: 2
    Dernier message: 07/01/2005, 20h20

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