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

Access Discussion :

Chemin d'accès à base contenant les tables


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut Chemin d'accès à base contenant les tables
    Hello tout le monde,


    Apres avoir utilisé le tutorial (dispo sur ce site) afin de créer un fichier LOG des erreurs encourrues lors de l'utilisation de l'application, j'apercois que le fichier LOG est stocké sur la Workstation faisant tourner Access:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ' Récupère le nom du fichier de base de données et lui ajoute l'extension .log
        strLogFileName = Left(CurrentDb.Name, Len(CurrentDb.Name) - 4) & Format(Now, "mmyy") & ".log"

    Lorsque je fractionne ma base, le fichier LOG se crée sur chaque Workstation alors que je voudrais qu'il soit créé sur le serveur sur lequel se trouve la base avec les tables.


    Cela fonctionne si j'utilise la propriété Connect de l'objet tableDefs


    Seulement, sur ma workstation, je ne travaille pas avec des tables liées. Toute mon application tient dans un fichier. LA propriété Connect ne me retourne rien dans ce cas la, et le fichier de LOG n'est pas créé, et une erreur est générée.



    Ma question est: Y a-t-il un moyen d'obtenir le chemin d'acces a la base contenant les tables, qu elle soient liées ou pas?


    J'espere avoir été clair


    Merci à tous!

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    regarde ici http://access.developpez.com/faq/?pa...Rep#currentDir
    ça doit correspondre à ce que tu cherches.

    A+

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    malheureusement non, cela me renvoit tjs la base en local.

    J'ai essayé ceci:

    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
    Function GetLinkedDBName(TableName As String)
    ' *** ex: GetLinkedDBName ("ENFANT")
    ' *** \\serveur\base de données\Base_de_donnees.mdb
    '
    Dim db As Database, Ret
    On Error GoTo DBNameErr
    Set db = CurrentDb()
    Ret = db.TableDefs(TableName).Connect
    GetLinkedDBName = Right(Ret, Len(Ret) - (InStr(1, Ret, "DATABASE=") + 8))
    Exit Function
    DBNameErr:
    GetLinkedDBName = 0
    End Function
     
     
     
     
    Public Function Mcr_Autoexec()
    Dim strLogFileName As String
     
        ' Si les tables sont liées (donc si il y a eu fractionnement)
        If (GetLinkedDBName("Tbl_Intervention") <> 0) Then
         strLogFileName = Left(GetLinkedDBName("Tbl_Intervention"), Len(GetLinkedDBName("Tbl_Intervention")) - 4) & Format(Now, "mmyy") & ".log"
        Else
         ' Récupère le nom du fichier de base de données et lui ajoute l'extension .log
         strLogFileName = Left(CurrentDb.Name, Len(CurrentDb.Name) - 4) & Format(Now, "mmyy") & ".log"
        End If
     
        Set oGestErreur = New GestionnaireErreur
        oGestErreur.Instancier strLogFileName
     
    End Function

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Désolé, je ne dois pas comprendre.

    Pour moi la base qui contient les tables (normales ou liées) c'est CurrentDB.
    Pourrai tu donner un exemple ?

    A+

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Bien non,

    une fois que je fractionne ma DB (donc table d'un coté et formulaire + code de l'autre), CurrentDB.name me donne tjs le chemin d'accès à la base ou se trouve les formulaires + le code et pas la base avec les tables.

    ps) merci de te pencher sur mon problème

  6. #6
    Invité
    Invité(e)
    Par défaut Voilà ce que...


    Voilà ce que j'utilise :
    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
     
    Function LinkMdb(CheminAcces As String) As Boolean
    Dim MyBD1 As Database
    On Error GoTo Err_LinkMdb
    Dim TableTemp As TableDef
    Dim strCompare As String, strAttache As String
    Dim strMsg As String, boucle As Integer
    Const cERR_USERCANCEL = vbObjectError + 1000
    Const cERR_NOREMOTETABLE = vbObjectError + 2000
     
    strCompare = ";DATABASE=" & CheminAcces$
    DoCmd.SetWarnings (False)
    Set MyBD1 = CurrentDb()
    For boucle = 0 To MyBD1.TableDefs.Count - 1
        Set TableTemp = MyBD1.TableDefs(boucle)
        ' Pour mes tables en local ne pas faire de liaison
        If TableTemp.Name = "_Admin" Or TableTemp.Name = "TblX Etats" Then GoTo Suite1
        If InStr(1, TableTemp.Name, "MSys") = 0 Then
          NomBase = Mid(TableTemp.Connect, InStrRev(TableTemp.Connect, "\") + 1, 255)
          strAttache = strCompare & NomBase
          If TableTemp.Connect <> (strCompare & NomBase) Then
            SysCmd acSysCmdSetStatus, "Mise à jour du lien pour : '" & TableTemp.Name & "'...."
            TableTemp.Connect = strAttache
            TableTemp.RefreshLink
          End If
        End If
    Suite1:
    Next boucle
    LinkMdb = True
    SysCmd acSysCmdClearStatus
     
    Exit_LinkMdb:
      DoCmd.SetWarnings (True)
      MyBD1.Close
      Set MyBD1 = Nothing
      Set TableTemp = Nothing
      LinkMdb = False
      Exit Function
     
    Err_LinkMdb:
      Select Case Err
      Case 3059:
      Case cERR_USERCANCEL:
        MsgBox "Aucune base de données n'est spécifiée, ne peut reconnecter les tables.", _
          vbCritical + vbOKOnly, "Erreur en rafraîchissant les liens."
        Resume Exit_LinkMdb:
      Case cERR_NOREMOTETABLE:
        MsgBox "La table '" & TableTemp.Name & "' n'est pas trouvée dans la base de donées " & _
          vbCrLf & MyBD1.Name & ". On ne peut rafraîchir le lien", vbCritical + vbOKOnly, _
                 "Erreur en rafraîchissant les liens."
        Resume Exit_LinkMdb:
      Case Else:
        strMsg = "Error Information..." & vbCrLf & vbCrLf
        strMsg = strMsg & "Function: fRefreshLinks" & vbCrLf
        strMsg = strMsg & "Description: " & Err.Description & vbCrLf
        strMsg = strMsg & "Error #: " & Format$(Err.Number) & vbCrLf
        MsgBox strMsg, vbOKOnly + vbCritical, "Error"
        Resume Exit_LinkMdb:
      End Select
    End Function
    Quelques modif à faire et hop

  7. #7
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Merci beaucoup mais ca me parait bien compliqué et + long que mon code.

    Il n'existe donc pas de fct juste pour connaitre le chemin d'accès a la DB contenant les tables...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Comme ça sans un peu de VBA, Ben non

    Noonn, je plaisante....

    Si tes tables sont déjà liées, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chemin = Mid(CurrentDb().TableDefs("NomTable").Connect,11)
    End Sub
    Voilà

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    ok,

    Junior_jef
    Le code que tu as montré, il fonctionne ou pas ?
    Hormis le fait que GetLinkedDBName retourne tantôt une chaîne de caractère, tantôt un nombre, il m'a l'air très bien.

    A+

  10. #10
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par LedZeppII
    ok,

    Junior_jef
    Le code que tu as montré, il fonctionne ou pas ?
    Hormis le fait que GetLinkedDBName retourne tantôt une chaîne de caractère, tantôt un nombre, il m'a l'air très bien.

    A+

    Oui, il fonctionne ( à noter que je l'ai pondu apres avoir posé ma question sur le forum)

    Mais je trouve ca un peu long, et je suis étonné qu'il n'existe pas une propriété ou une fonction toute faite


    ps) merci pour la remarque concernant le type de retour, vais changer ca de suite

  11. #11
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par BrunoM45
    Comme ça sans un peu de VBA, Ben non

    Noonn, je plaisante....

    Si tes tables sont déjà liées, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chemin = Mid(CurrentDb().TableDefs("NomTable").Connect,11)
    End Sub
    Voilà


    J'ai du mal expliquer


    mais:

    Seulement, sur ma workstation, je ne travaille pas avec des tables liées. Toute mon application tient dans un fichier. La propriété Connect ne me retourne rien dans ce cas la, et le fichier de LOG n'est pas créé, et une erreur est générée.

  12. #12
    Invité
    Invité(e)
    Par défaut C'est moi...
    C'est moi qui est mal lu....

    C'est peut-être ça que tu cherches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Chemin = Application.CurrentProject.Path
    A+

  13. #13
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par BrunoM45
    C'est moi qui est mal lu....

    C'est peut-être ça que tu cherches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Chemin = Application.CurrentProject.Path
    A+

    non j'ai deja essayé et c'est le meme problème.

    Tant pis, je vais pas vous embeter + longuement avec ca. Je vais utiliser ma méthode meme si je la trouve pas tres "propre"


    Merci à tous!

  14. #14
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Citation Envoyé par Junior_jef
    Mais je trouve ca un peu long, et je suis étonné qu'il n'existe pas une propriété ou une fonction toute faite
    Je ne connais pas de fonction toute faite.

    Moi aussi je récupère le chemin de la base pour une table liée dans la propriété connect.
    Ou alors directement dans la table système MSysObjects
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT MSysObjects.Connect, MSysObjects.Database, MSysObjects.ForeignName, 
           MSysObjects.Name, MSysObjects.Owner, MSysObjects.Type
    FROM MSysObjects
    WHERE (((MSysObjects.Type)=1 Or (MSysObjects.Type)=6));
    Il y a une colonne Database pour les tables liées.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Augmentation énorme de la base contenant les modules
    Par Bicor22 dans le forum Access
    Réponses: 5
    Dernier message: 22/06/2015, 22h12
  2. Problème chemin d'accès base de données
    Par delavega dans le forum ASP
    Réponses: 7
    Dernier message: 17/08/2009, 08h49
  3. [DW8] Chemin d'accés conservés sur les liens
    Par fafaroma dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 05/03/2007, 16h06
  4. Réponses: 14
    Dernier message: 12/07/2006, 16h26
  5. Sécurisation accès Base au niveau tables
    Par dfournier dans le forum Sécurité
    Réponses: 4
    Dernier message: 07/12/2005, 18h18

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