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 :

Fonctionnement erratique d'une base fractionnée


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Fonctionnement erratique d'une base fractionnée
    Bonjour

    Depuis quelques temps, mon application ACCESS a un fonctionnement un peu erratique.
    C'est pourtant une base qui existe depuis 2006 mais les symptômes sont assez nouveau et je ne parviens pas à les expliquer.
    Ils surviennent à certain moment et pas à d'autres ou/et chez certains utilisateurs et pas chez d'autres.
    Ils semblent ne pas être réguliers et ne provoquent aucun message d'erreur.
    Après "plantage", la plupart du temps la base frontale fonctionne mais il n'y a plus de données dans les liste, formulaires, tableaux...

    Pour le dernier plantage en date, voilà les différentes étapes avant plantage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub B_Recyclage_Click()
     
        'Ouverture de la fenêtre
        DoCmd.OpenForm "F_Recyclage"
     
    End Sub
    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
    Private Sub Form_Open(Cancel As Integer)
     
        If Table_REP = "" Then Table_REP = "REP_Temp"
     
        'Vider la table Rep_Temp
        SQl = "DELETE " & Table_REP & ".*" & _
        " FROM " & Table_REP & ";"
     
        DoCmd.SetWarnings False 'désactive les messages d'info auto
        DoCmd.RunSQL SQl
        DoCmd.SetWarnings True 'désactive les messages d'info auto
     
        Call Maj_Liste
     
    End Sub
    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
    Private Sub Form_Load()
     
        Dim jeu As New ADODB.Recordset
        Dim Con As New ADODB.Connection
        Dim Nb As Integer
     
        Set Con = Application.CurrentProject.Connection
     
        SQl = "SELECT COMpetence_Liste.COMPLIS_Num, COMpetence_Liste.COMPLIS_Lib" & _
        " FROM COMpetence_Liste;"
     
        jeu.Open SQl, Con, adOpenKeyset, adLockReadOnly
     
        Me.S_Comp.AddItem "0;Toutes"
     
        While Not jeu.EOF
            Me.S_Comp.AddItem jeu!COMPLIS_Num & ";" & jeu!COMPLIS_Lib
            jeu.MoveNext
        Wend
     
        jeu.Close
        Set Con = Nothing
     
        Me.S_Comp = 0
     
        Me.Filtre_Date = 1
        Me.S_Toterance.Enabled = True
        Me.S_Anticipation.Enabled = True
        Me.Date_mini.Enabled = False
        Me.Date_Maxi.Enabled = False
     
    End Sub
    La fenêtre ne c'est même pas ouverte, la base frontale est restée en fonctionnement, plus de données et pas de message d'erreur.

    Si quelqu'un a une hypothèse d'explication ou peut être des recommandations sur des vérifications ou des tests à faire, suis preneur.

    Merci d'avance.
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Au lieu d'utiliser une connexion VBA, il y a la solution classique "Attach Table" pour la table "COMpetence_Liste" via "Menu\External Data\Linked Table Mgr"
    ça pourrait peut-être résoudre le problème. Le hic: il faut le faire sur chaque PC (et à refaire à chaque mise à jour des bases dorsales, frontales).

    Désolé, j'ignore les traductions françaises !

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci Zekraoui,

    Je vais étudier cette piste.
    J'utilisais des tables temporaire hébergées sur la base dorsale et je test en ayant transformé ces tables en locales.
    Il se trouve que les plantage coïncide toujours avec une étape qui fait appel à ces tables.
    Les solutions les plus simples sont les plus efficaces

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Bonjour,

    Comme son contenu l'indique,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.SetWarnings False
    prive l'utilisateur de tout message d'erreur. C'est donc une très mauvaise habitude de programmation malheureusement très répandue

    A l'inverse,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentdb.execute SQL, dbfailonerror
    permet de lever une erreur qu'on peut ensuite traiter pour savoir ce qui a posé problème

    Je ne vois aucune gestion d'erreur dans le code. C'est un peu plus de travail mais indispensable d'une manière générale. Personnellement j''envoie toutes les erreurs vers une procédure qui écrit dans un journal, c'est extrêmement utile quand l'appli est mise en exploitation. Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '14.7h plus grand d'une série de nombres
    Public Function NGmax(ByVal n1 As Double, Optional ByVal n2 = Null, Optional ByVal n3 = Null) As Double
    If Not Mode_debug Then On Error GoTo err
    Dim X As Double
    100 X = n1
    102 If Not IsNull(n2) Then If n2 > X Then X = n2
    103 If Not IsNull(n3) Then If n3 > X Then X = n3
    116 NGmax = X
        Exit Function
    err: Call message("Erreur " & err.Number & "/" & Erl & " dans fonctions.NGmax : " & err.description)
    End Function
    Les n° sont indispensables pour savoir à quelle ligne a eu lieu l'erreur (cf Erl). Le Mode_debug est réservé aux développeurs comme son nom l'indique.
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci Nico84, c'est très instructif !!! Cool

    J'ai des questions :
    - Je vois un "100" juste avant "X = n1" notamment, c'est une valeur que tu saisis dans ton code ou c'est le numéro de la ligne de code ?
    - Quand et comment alimentes tu ta variables Mode_Debug ?
    - Que fait ta fonction message ?
    - Tu parles d'un journal. Cela suppose que tu l'ouvres au démarrage de l'appli ?


    Merci de ton aide ;-)
    Les solutions les plus simples sont les plus efficaces

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Nico84, pour les Warnings,

    Je désactive car c'est pénible d'avoir des infos sur ce qui va être fait et les demande de confirmation (nombre de ligne traitées...)
    Existe t'il une solution pour ne pas avoir ces messages tout en préservant les message d'erreur ?
    Les solutions les plus simples sont les plus efficaces

  7. #7
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 088
    Points : 5 204
    Points
    5 204
    Par défaut
    Citation Envoyé par lololebricoleur Voir le message
    Je vois un "100" juste avant "X = n1" notamment, c'est une valeur que tu saisis dans ton code ou c'est le numéro de la ligne de code ?
    Il faut numéroter toutes les lignes de code pour savoir à quelle ligne a eu lieu l'erreur, c'est un peu fastidieux...
    Citation Envoyé par lololebricoleur Voir le message
    - Quand et comment alimentes tu ta variables Mode_Debug ?
    Le logiciel démarre en mode 'utilisateur' ou 'développeur' avec un environnement différent (vision des tables et du code, forms modifiables...) selon qu'il est compilé ou non
    Citation Envoyé par lololebricoleur Voir le message
    - Tu parles d'un journal. Cela suppose que tu l'ouvres au démarrage de l'appli ?
    Le journal est une des tables de la frontale, il recueille tous les évènements de tous les utilisateurs (un peu comme un log d'une base de données)
    Citation Envoyé par lololebricoleur Voir le message
    - Que fait ta fonction message ?
    Elle écrit dans le journal ci-dessus
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci te ton aide Nico84,

    Je reviens sur la numérotation des lignes.
    VBA supporte le fait que tu indiques manuellement un numéro de ligne !?
    Ou il y a un méthode spécifique pour l'obtenir ?

    Merci ;-)
    Les solutions les plus simples sont les plus efficaces

  9. #9
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    A ma connaissance, on peut numéroter les lignes comme on veut, du moment que l'on garde un minimum de logique (pour s'y retrouver facilement).

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/09/2008, 10h05
  2. Réponses: 2
    Dernier message: 28/06/2008, 15h57
  3. Tester les liens d'une base fractionnée
    Par Gabout dans le forum Access
    Réponses: 2
    Dernier message: 08/03/2007, 22h52
  4. Réponses: 8
    Dernier message: 30/08/2006, 16h22
  5. Protection d'une base fractionnée
    Par faiglon dans le forum Sécurité
    Réponses: 8
    Dernier message: 02/08/2006, 16h26

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