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

Modélisation Discussion :

Limites d'Access dans la pratique [AC-2003]


Sujet :

Modélisation

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut Limites d'Access dans la pratique
    Bonjour,

    J'ai commencé à développer une base de données Access qui devait être utilisée initialement par 4 personnes puis on m'a demandé pour 20 et maintenant peut-être pour 60 ou 80 personnes. (toutes en lecture et écriture)

    1. Access sera-t-il capable de gérer toutes ces utilisateurs en même temps? (théoriquement c'est 255 utilisateurs mais en pratique?)
    2. J'ai aussi des macros qui permettent de créer des enregistrements dans des tables, trop d'accès simultanés à une table ça peut se produire? (je ne suis pas du tout à l'aise sur cette partie, je ne sais pas comment sont gérés les accès multiples à une table etc)
    3. Avez-vous des liens pour que je comprenne la partie multi-utilisateurs d'Access (je viens d'Excel alors on en est loin)

    J'ai vu que la taille d'une base Access est limitée, donc si on supprime purement et simplement des enregistrements, cela suffira-t-il? (je n'ai besoin que de 4 ans d'historique)

    Par la suite, peut-on mettre Access sur un intranet? Cela est-il difficile a mettre en place et surtout à gérer?

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour,

    A vous lire, Access ne semble pas correspondre à vos nouveaux besoins.

    80 personnes : c'est beaucoup beaucoup trop
    4 ans d'historique : ça peut vite faire une très grosse base vu le nombre d'utilisateur
    Intranet : Non, pas du tout adapté

    Je vous conseille plutot de vous orienter vers SQL Server pour les données et conserver l'application sous Access

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Merci pour ta réponse Tofalu!

    Une base Access peut gérer correctement combien d'utilisateurs en simultanée?

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    1

    Plus sérieusement, tout va dépendre de la taille et des accès à la base. Sans compter la qualité du réseau, car on est sur une architecture client/serveur.
    Passé la dizaine, tu auras pas mal de difficultés à avoir quelque chose d'utilisable en lecture/écriture.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    10 ça fait peu...

    Je te conseille plutot de t'orienter vers SQL Server pour les données et conserver l'application sous Access
    Comment fonctionnerai un couple SQL Server / Access ?
    Je ne connais pas du tout SQL Server... ce serait pour stocker les données et Access serait l'interface?

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par buzz73 Voir le message
    10 ça fait peu...


    Comment fonctionnerai un couple SQL Server / Access ?
    Je ne connais pas du tout SQL Server... ce serait pour stocker les données et Access serait l'interface?
    Tout à fait.

    Et au lieu d'avoir une base frontale mdb, tu aurais ce que l'on appelle un projet Access adp ou ade (si compilé)

    Il doit y avoir un tutoriel qui traine là dessus. Essaye de voir à cette adresse http://access.developpez.com/cours

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    J'ai trouvé le lien :
    http://argyronet.developpez.com/office/access/mdb2adp/

    Donc je peux tranquillement terminer mon application 100% access puis par la suite la faire migrer c'est bien ça?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    Bonjour,
    il est préférable de passer directement en sql serveur car il y aura des différences comme le montre le lien.
    Il ne faut pas oublier le cout car pour 60 utilisateurs cela ne sera pas faible.
    en effet la version sql Server 2005 express est limité à 4 Go de données à 1 G0 de RAM et enfin optimisé à 20 utilisateur ce qui n'empeche pas de le faire fonctionner pour 80 utilisateurs.
    Bonne journée

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    A moindre modif on peut utiliser SQL server avec des tables attachées et faire du DAO. Pour les gros traitements couteux on passe en ADO avec du SQL Direct.

    ça fonctionne pas trop mal.

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Bon je vais finir mon application Access puis je vais me pencher là dessus.

    Merci à tous pour vos réponses!

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Tant pis si je passe pour un "pinailleur"...
    Citation Envoyé par loufab Voir le message
    A moindre modif on peut utiliser SQL server avec des tables attachées et faire du DAO.
    Pour les gros traitements couteux on passe en ADO avec du SQL Direct.
    Le SQL Direct c'est possible aussi avec DAO.

    Citation Envoyé par buzz73 Voir le message
    2. J'ai aussi des macros qui permettent de créer des enregistrements dans des tables, trop d'accès simultanés à une table ça peut se produire? (je ne suis pas du tout à l'aise sur cette partie, je ne sais pas comment sont gérés les accès multiples à une table etc)
    Pour répondre juste sur l'ajout d'enregistrements...
    La manière de gérer l'ajout d'un enregistrement au niveau de Jet (le moteur de bases de données d'Access) garantit qu'il n'y a jamais de conflits entre n ajouts simultanés dans une même table, à moins de violer les contraintes d'intégrité (bien évidemment).
    Mais en tout cas, il n'y a pas de problème de verrouillage.
    _

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Merci pour ces indications supplémentaires (je suis rassuré )

    J'ai une question supplémentaire :
    J'ai une table qui est constamment vidée et remplie à nouveau afin de mettre à jour une autre table. Cela se fait suite à une action bien particulière de changement de quantité.
    Peut-on rencontrer des problèmes si plusieurs personnes font cette action au même moment? (elle dure quelques secondes mais Loi de Murphy oblige ) Et si oui quel type de problème?

    Si par exemple il y a 3 actions consécutives sur la table pour que tout soit ok, peut-il y avoir une action extérieure entre 2 actions et donc corrompre les données?

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    A ce stade de la discussion, si tu choisis de développer en MDB, il me semble clair que tu auras une architecture de type "base dorsale (les données) - base frontale (l'application)".
    - La base dorsale (les données) est placée sur un serveur de fichiers, dans un dossier partagé.
    - La base frontale (l'application) est copiée sur chaque PC utilisateur.

    Citation Envoyé par buzz73 Voir le message
    J'ai une question supplémentaire :
    J'ai une table qui est constamment vidée et remplie à nouveau afin de mettre à jour une autre table. Cela se fait suite à une action bien particulière de changement de quantité.
    Peut-on rencontrer des problèmes si plusieurs personnes font cette action au même moment? (elle dure quelques secondes mais Loi de Murphy oblige ) Et si oui quel type de problème?

    Si par exemple il y a 3 actions consécutives sur la table pour que tout soit ok, peut-il y avoir une action extérieure entre 2 actions et donc corrompre les données?
    Bien sûr qu'il risque d'y avoir des conflits (un utilisateur ajoute, pendant qu'un autre vide la table , et toutes les combinaisons sont possibles).

    Je vois 2 problèmes:
    - sur la table temporaire (constamment vidée et remplie),
    - sur la table qui doit être mise à jour.

    Pour la table temporaire, le mieux est d'en faire une table de travail locale à la base frontale, comme ça elle n'est jamais partagée.

    Pour la mise à jour d'une table (celle-ci placée dans la base dorsale) le plus simple est d'exécuter la requête de mise à jour en spécifiant une option qui interdit l'écriture simultanée par plusieurs utilisateurs.

    Par exemple, en DAO:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDB.Execute "nom d'une requête de mise à jour", dbDenyWrite + dbFailOnError
    Ce code garantit que les mises à jour seront effectuées à la condition qu'il n'y ait pas de conflit d'écriture.
    Sinon, aucune mise à jour n'est effectuée et une erreur est générée pour que le programme puisse prendre les mesures qui s'imposent (par exemple, effectuer une nouvelle tentative après un un certain délai ).
    _

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    N'étant pas encore à l'aise avec tout ça, je vais prendre l'option d'écriture par un seul utilisateur à la fois pour cette table particulière. Théoriquement, elle ne devrait pas être trop utilisée donc avec ton code ça devrai être tout bon.
    Merci!

    Euh...
    Comment on utilise ce code? Actuellement, dans l'événement AfterUpdate d'un contrôle je lance une macro qui lance différentes requêtes. Et c'est justement pendant cette macro que j'aimerai interdire les modifications sur la table qui est vidée et re-rempli( table1)
    De plus, je dois aussi interdire les modifications par les autres utilisateurs sur la table (table2) qui est ensuite mise à jour à partir de de la table1 ou le moteur Jet gère déjà tout tout seul?

    (si vous avez des tuto ou des bouts de cours sur cette partie je veux bien car je nage là...)

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par buzz73 Voir le message
    Euh...
    Comment on utilise ce code? Actuellement, dans l'événement AfterUpdate d'un contrôle je lance une macro qui lance différentes requêtes. Et c'est justement pendant cette macro que j'aimerai interdire les modifications sur la table qui est vidée et re-rempli( table1)
    De plus, je dois aussi interdire les modifications par les autres utilisateurs sur la table (table2) qui est ensuite mise à jour à partir de de la table1 ou le moteur Jet gère déjà tout tout seul?
    Si tu veux que nous puissions t'aider concrêtement, tu devrais nous donner le code de la procédure événementielle _AfterUpdate().

    Concernant table1, si tu effectues un découpage dorsale-frontale, et que tu places table1 dans la base frontale, alors il n'y aura pas de conflit car cette table sera accédée en mono-utilisateur.

    Pour la mise à jour de table2, merci de nous donner ton code. Nous pourrons te montrer comment l'adapter.
    _

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Pour la procédure événementielle, je suis passé par le mode graphique donc dans "Après Maj", j'ai la macro :
    M_QteBoxChange_Maj_T_QtePromo_Temp

    Voici ce qu'elle fait :
    1. Arrêt des avertissements
    2. Lancement d'une requête qui vide table1
    3. J'ai ajouté un "ExécuterCommande" qui actualise.
    4. Je remplis table1 (clé primaire sur 2 champs) avec les résultats d'une requête qui fait des regroupements et qui somme les quantités
    5. Je mets à jour les quantités de table2 si les enregistrements sont présents dans table1 => Qtés
    6. Je mets à 0 les enregistrements de table2 qui ne sont pas présents dans table1
    7. Je remets les avertissements



    Concernant table1, si tu effectues un découpage dorsale-frontale, et que tu places table1 dans la base frontale, alors il n'y aura pas de conflit car cette table sera accédée en mono-utilisateur.
    J'en ai effectivement entendu parlé mais je ne sais pas faire ça.
    Pour le moment j'apprends à faire l'application puis je vais devoir apprendre à faire ça.
    Est-ce que je peux mettre la base sur un fichier commun à tout le monde (dans un fichier à mon nom, c'est ce que je comptais faire par la suite) ne contenant que les tables et créer un .mdb (je crois que c'est celui là qui sert de client c'est ça) que j'aurais sur mon pc et quand même continuer de développer mon application? Comme ça je pourrai mettre table1 en frontale (elle ne sera donc pas sur le fichier commun c'est bien ça?).

    ps : c'est sympa de s'occuper de mon problème, merci.

  17. #17
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Pour commencer tu devrais convertir la macro Access M_QteBoxChange_Maj_T_QtePromo_Temp en une procédure VBA.

    Dans la fenêtre de Base de données, tu sélectionnes la macro.
    Puis dans le menu Outils, sous-menu Macro, tu exécutes la commande:
    Convertir les macros en Visual Basic.

    Un nouveau module de code est créé avec le code VBA équivalent à la macro Access.
    Ouvre ce module de code (il est affiché dans VBE, Visual Basic Editor, l'environnement de développement de VBA), copie le code et envoie le nous.

    Merci !

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Je ne connaissais pas la manip.
    C'est très intéressant de pouvoir voir le contenu des macros

    Voici le code de M_QteBoxChange_Maj_T_QtePromo_Temp

    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
    '------------------------------------------------------------
    ' M_QteBoxChange_Maj_T_QtePromo_Temp
    '
    '------------------------------------------------------------
    Function M_QteBoxChange_Maj_T_QtePromo_Temp()
    On Error GoTo M_QteBoxChange_Maj_T_QtePromo_Temp_Err
     
        DoCmd.SetWarnings False
        ' vider T_QtePromo_Temp
        DoCmd.OpenQuery "R_Vider_T_QtePromo_Temp", acViewNormal, acEdit
        DoCmd.RunCommand acCmdRefresh
        ' Ajout_T_QtePromo_Temp
        DoCmd.OpenQuery "R_Ajout_T_QtePromo_Temp avec R_QtePromo_IDArt_IdEnseigne", acViewNormal, acEdit
        ' Maj FcstKAM_ Qte Art ds promo
        DoCmd.OpenQuery "R_Maj_FcstKAM_QtePromo avec T_QtePromo_Temp", acViewNormal, acEdit
        ' Maj FcstKAM_QtePromo à 0
        DoCmd.OpenQuery "R_Maj_FcstKAM_ArticleSansQtePromo", acViewNormal, acEdit
        DoCmd.SetWarnings True
     
     
    M_QteBoxChange_Maj_T_QtePromo_Temp_Exit:
        Exit Function
     
    M_QteBoxChange_Maj_T_QtePromo_Temp_Err:
        MsgBox Error$
        Resume M_QteBoxChange_Maj_T_QtePromo_Temp_Exit
     
    End Function

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Voilà une proposition de réécriture de la macro Access, en utilisant la bibliothèque DAO pour l'accès aux données (au lieu de ADO).

    Donc, pour que ce code soit compilé sans erreur et qu'il puisse fonctionner, il faut ajouter une référence à bibliothèque DAO.
    Code VBA : 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
    Public Sub QteBoxChange_Maj_FcstKAM()
        Dim oDB As DAO.Database
        Dim sMsg As String
        Dim eResult As VBA.VbMsgBoxResult
     
        Set oDB = Application.CurrentDb
     
        ' 2. vider T_QtePromo_Temp
        oDB.Execute "R_Vider_T_QtePromo_Temp"
     
        ' 3. actualiser
        DoCmd.RunCommand acCmdRefresh
     
        ' 4. Ajout_T_QtePromo_Temp
        oDB.Execute "R_Ajout_T_QtePromo_Temp avec R_QtePromo_IDArt_IdEnseigne"
     
    On Error GoTo ErreurConflit
     
        ' 5. Maj FcstKAM_ Qte Art ds promo
        oDB.Execute "R_Maj_FcstKAM_QtePromo avec T_QtePromo_Temp", dbDenyWrite + dbFailOnError
     
        ' 6. Maj FcstKAM_QtePromo à 0
        oDB.Execute "R_Maj_FcstKAM_ArticleSansQtePromo", dbDenyWrite + dbFailOnError
     
    Fin:
        Set oDB = Nothing
        Exit Sub
     
    ErreurConflit:
        If Err.Number = 3008 Then
            sMsg = "Conflit d'écriture sur la table FcstKAM." & vbCrLf & "Voulez-vous essayer à nouveau ?"
            eResult = MsgBox(sMsg, vbCritical + vbRetryCancel)
     
            If eResult = vbRetry Then Resume        
        Else
            MsgBox Err.Description & Err.Number, vbCritical, "Erreur !"
        End If
     
        Resume Fin
     
    End Sub
    Si ça fonctionne pour toi, alors l'étape suivante consiste à "brancher" ce code sur la procédure événementielle (ou simplement recopier ce code).
    _

  20. #20
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 268
    Points : 130
    Points
    130
    Par défaut
    Je viens de tester le code (après plusieurs lectures )
    et ça marche impeccable, merci.
    Par contre je ne sais pas comment je peux tester la multi-utilisation...
    (j'ai 2 pc sous la main)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Limiter l'access aux repertoires d'un utilisateur dans webmin.
    Par rufa11 dans le forum Administration système
    Réponses: 1
    Dernier message: 11/12/2014, 21h32
  2. [FrontPage 2003] Afficher éléments base Access dans page ASP
    Par laville dans le forum Autres langages
    Réponses: 3
    Dernier message: 03/08/2005, 09h27
  3. Limiter la saisie dans un élément texte
    Par manou.K dans le forum Oracle
    Réponses: 2
    Dernier message: 28/07/2005, 11h41
  4. limiter l'access aux tables
    Par xopos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/08/2004, 10h53
  5. limiter la saisie dans un edit à des réels!!!
    Par shout dans le forum Windows
    Réponses: 10
    Dernier message: 21/06/2004, 16h20

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