Access et ODBC

Linuxfor men -  
 qsdf -
Bonjour,

Voilà mon souci.
Dans une base Access, j’ai des tables ODBC qui sont protégées par Login/mdp cad que lorsqu'on veut les consulter, une boite de dialogue s'affiche demandant le Login et le mdp.
Après saisie correcte des informations, la table s'affiche.
Dans une macro, je lance automatiquement l'exécution d'une requete qui se sert d'une de ces tables. En conséquence, la boite de dialogue s'affiche et attend qu'on l'a renseigne.
Je voudrais pouvoir renseigner ces infos automatiquement sans avoir à les saisir.
Est ce possible dans Access? Ou faut il que je vois le pb dans le paramétrage ODBC?
Merci d'avance.

4 réponses

  1. qsdf
     
    Quand tu attaches tes tables, tu as une case à cocher "retenir le login et mot de passe". Il faut la cocher sous peine de rencontrer ton problème. Une fois l'attache créée, je ne connais pas de solution pour s'affranchir du mot de passe si cette case n'a pas été cochée. Donc refais tes attaches !
    1
  2. qsdf
     
    Recherche aussi dans l'aide du coté de la méthode connect des objets TableDef.
    [CurrentDB.TableDefs(<indexe>).connect = ...]
    1
  3. Linuxfor men
     
    Merci pour ces conseils;

    Je pense qu'avec la première réponse, on peut s'en tirer.
    Mais il faut récrer toutes les attaches aux tables...galère.
    1
  4. qsdf
     
    Inspirez vous de celà :
    (je n'ai pas testé ni compilé, mais c'est l'idée à suivre pour ne pas devoir tout faire à la main)

    Option Compare Database
    Option Explicit
    Option Base 0

    Sub rattache()
    Dim nbTables As Long ' nombre de tables dans la liste
    Dim i As Long ' compteur de boucle
    Dim nouvelleTable As TableDef ' nouvelle table à lier
    Dim nomTable As String ' nom de la table
    Dim user As String ' nom utilisateur
    Dim mdp As String ' mot de passe
    Dim base As String ' nom de la base externe (tablespace ?)

    mdp = "xxx"
    user = "zzzz"
    base = "bbbb"

    ' compte le nombre de table
    nbTables = CurrentDb.TableDefs.Count

    ' parcours la collection des tables liées dans cette BDD pour récupérer leur nom et refaire les attaches
    For i = nbTables - 1 To 0 Step -1 ' respecter le décompte SVP sinon il y aura des Pb d'indexation lors du retrait des liens
    If Left(CurrentDb.TableDefs(i).Connect, 4) = "ODBC" Then ' si c'est une table liée
    nomTable = CurrentDb.TableDefs(i).Name ' récupère le nom de la table
    CurrentDb.TableDefs.Delete nomTable ' efface le lien
    ' création d'un nouveau lien
    Set nouvelleTable = CurrentDb.CreateTableDef(nomTable, dbAttachSavePWD, nomTable, "ODBC;DATABASE=" & nomTable & ";UID=" & user & ";PWD=" & mdp & ";DSN=" & base & ";;")
    CurrentDb.TableDefs.Append nouvelleTable ' rattache la table à la collection
    CurrentDb.TableDefs(nomTable).RefreshLink ' raffraichi la collection
    End If
    Next i
    End Sub
    1