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 :

Gérer les connexions avec ADO


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Gérer les connexions avec ADO
    Bonjour à tous,

    J'ai rarement l'habitude de poster de nouveaux sujets. Par contre, cette fois-ci, je n'ai trouvé aucune référence (jugée pertinente ) sur internet tant en anglais qu'en français pouvant répondre à ma question que voici:

    J'ai une base de données au format MDE qui est connectée à SQL-SERVER avec la forme classique frontale/dorsale. Cette base est partagée sur le réseau aux utilisateurs. Autrement dit, tous les utilisateurs se connectent au même fichier pour y travailler (ce n'est pas mon idée, je sais pertinament que c'est mieux de distribuer l'application, mais ce n'est pas le but de ce post ). Bref, je me demandais comment gérer efficacement les connexions ADO à SQL SERVER dans cette situation. Est-il préférable de:

    1- Créer une connexion globale que l'on ouvre au démarrage de l'application et qu'on utilise tout au long de l'utilisation du programme et que l'on ferme à la fermeture du programme

    ou

    2- Créer une connexion globable que l'on ouvre et que l'on ferme à chaque fois qu'on en a besoin permettant ainsi à SQL SERVER de faire son connexion pooling à sa guise

    Chaque option a ses avantages et ses inconvénients selon moi. Par contre, je ne pourrais pas dire laquelle est préférable.

    À vous de me convaincre

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    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 034
    Points : 24 602
    Points
    24 602
    Par défaut
    Bonjour,

    Je suggère la 1. Si ça rame parceque tout le monde est sur la même appli (oui mais ce n'est pas le sujet du post) au moins tu ne leur imposera pas le temps de connexion à chaque solicitation d'une source de données.

    Cordialement,

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Je suis tout-à-fait d'accord avec cette option et c'est celle que j'utilise actuellement, mais j'obtiens des délais d'attente expirés... et mon serveur n'est pas utilisé à 1% de sa capacité!

    J'ai un exemple concret: j'ai construit une vue sur SQL SERVER qui retourne environ 10 000 records sur un total de 300 000. J'interroge cette vue pour qu'elle me retourne au maximum 500 records pour affecter le retour à une listbox. Et bien l'appli s'est mise à dérailler et impossible d'ouvre le formulaire contenant la liste

    ... mais tout ça n'a pas vraiment de lien avec le sujet initiale

  4. #4
    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,
    pourquoi ne pas tout passer en ade puisque tu utilises sql server

    Bonne journée

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    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 034
    Points : 24 602
    Points
    24 602
    Par défaut
    500 enregistrements dans une zone liste... et combien de colonnes, quels types de données ? c'est un peu chaud au niveau du nombre de page (voir le tuto sur l'optimisation)

    Même en client/serveur il faut limiter les échanges. Prendre ce que l'utilisateur à réellement besoin.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Beaucoup de colonnes... une 20aine

    Malheureusement, je dois t'avouer que j'ai plus ou moins le choix de fonctionner de cette manière. De plus, c'est AU MAXIMUM 500. Je te dirais qu'en moyenne c'est entre 100 et 250 records qui sont retournés... mais on dévie du sujet ou je ne m'abuse?

    @cbleas: la technologie ADP/ADE est faite pour être utilisée par un et un seul utilisateur à la fois sinon on a un "problème" d'accès en lecture seule pour les utilisateurs subséquents et c'est la raison pour laquelle je l'ai mise de côté

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Salut,

    Je dois avoir une dizaine d'applis qui fonctionnent comme ça et je n'ai aucun problème de perf.
    Par contre, je n'ai pas bien compris ton premier post :
    Tu as un MDE sur le réseau et tous les utilisateurs ouvrent le même MDE, sans faire de copie sur leur poste en local ?

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Oui, c'est exactement ça. Je sais que ce n'est pas du tout optimisé, mais on m'a fait comprendre que ça DEVAIT rester ainsi (malheureusement)

    Je n'ai pas de problème de performances en tant que tel: les requêtes s'exécutent bien et rapidement, j'ai mis l'accent sur l'optimisation des index et des requêtes et je retourne toujours seulement les enregistrements et les champs (pas de *) dont j'ai besoin. Le problème est carrément un problème de 'TIMEOUT' au niveau du serveur. Il y a toujours la méthode barbare de mettre un connection/command timeout à 0, mais c'est pas très clean

    J'ai même eu des statistiques d'utilisation du serveur et ce dernier n'est pas utilisé à pleine capacité (à peine 1%). Donc je me demande vraiment l'endroit où j'ai loupé un truc par exemple, la méthode de connection

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    La première fois que j'ai eu un problème de timeout, c'était ce matin. Mais l'utilisateur demandait pas loin de 1 000 000 lignes ...
    Ma fonction d'init de la connection :
    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
        Private Sub ADOInitConnection()
        On Error GoTo Erreur
        Set lADO_Connection = New ADODB.Connection
        SysCmd acSysCmdSetStatus, "Connecting ..."
     
        If cSTR_BASE = "DEV" Then
            lADO_Connection.ConnectionString = "Driver={SQL Server};server= ....;UID=" & cSTR_UID & ";PWD=" & cSTR_PWD & ";database=" & cSTR_DATABASE & cSTR_BASE
        Else
            lADO_Connection.ConnectionString = "Driver={SQL Server};server=....;UID=" & cSTR_UID & ";PWD=" & cSTR_PWD & ";database=" & cSTR_DATABASE & cSTR_BASE
        End If
        lADO_Connection.ConnectionTimeout = 10
        lADO_Connection.CommandTimeout = 10000
        lADO_Connection.Open
        SysCmd acSysCmdSetStatus, "Connection OK."
        Exit Sub
     
    Erreur:
        SysCmd acSysCmdSetStatus, Now & " - Connection KO. Attente de " & cINT_NB_MINUTES_ATTENTE_AVANT_TEST_RECONNECTION & " minutes avant nouveau test de connexion."
        'Debug.Print Now & " - " & Err.Number & " - " & Err.Description
        Attendre 60 * cINT_NB_MINUTES_ATTENTE_AVANT_TEST_RECONNECTION
        SysCmd acSysCmdSetStatus, " "
        ADOInitConnection
    End Sub

  10. #10
    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,
    @cbleas: la technologie ADP/ADE est faite pour être utilisée par un et un seul utilisateur à la fois sinon on a un "problème" d'accès en lecture seule pour les utilisateurs subséquents et c'est la raison pour laquelle je l'ai mise de côté
    Et ben je pense qu'il faudrait revoir cela car le projet si je m'abuse est prévu pour du client serveur et si c'est pour avoir un seul client ça n'a vraiment aucun interet d'utiliser sql server.
    Sinon j'ai créé une application de GMAO en adp et plusieurs clients se connecte dessus.

    Bonne journée.

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Kloun, mon code ressemble vaguement au tiens, je ne pense pas que ce soit lorsque j'établis la connection qu'il y ait un problème, mais merci quand-même

    cbleas: on s'est peut-être mal compris. Ce que je voulais dire c'est que plusieurs utilisateurs ne peuvent pas ouvrir LE MÊME fichier ADP sans avoir un message du genre "Le fichier est déjà ouvert par blablabla, il sera ouvert en lecture seule et blablabla". Ce n'est pas un gros problème. Il serait préférable, toutefois, d'avoir 1 fichier par usager ce qui est, dans mon cas, impossible malheureusement

  12. #12
    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
    bonsoir.

    pourquoi est ce impossible que chacun ai la base dorsal?
    donc tu mets le fichier dorsal dans un document partagé ce que je ne croit pas etre la meilleurs solution.
    et d'ailleurs est ce que ce n'est pas une cause possible de ton problème?

    Bonne journée

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    cbleas: c'est la base FRONTALE en passant Je ne peux pas pour des raisons de maintenance, je me trouve dans une circonstance particulière pour un développeur et je ne peux pas me permettre de copier la base sur chaque poste. Enfin, je veux le faire, mais mes patrons ne sont pas d'accord

  14. #14
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    C'est pour des questions de mises à jour de version ?

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    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 034
    Points : 24 602
    Points
    24 602
    Par défaut
    tu serais pas dans une administration par hasard ?

  16. #16
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Kloun: effectivement... et je ne suis pas administrateur sur le réseau donc s'il y a un bogue, je ne peux pas accéder au système de mes utilisateurs

    Loufab: pire... au gouvernement

  17. #17
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Pour distribuer les nouvelles versions de mes applis, je me sers d'un serveur FTP.
    A chaque lancement, l'appli vérifie si son numéro de version est OK, si ce n'est pas le cas, ça signifie qu'une nouvelle version est dispo => Récupération de la nouvelle version, ouverture de la nouvelle et fermeture de l'ancienne.
    Dès que l'utilisateur effectue une opération sur la nouvelle, effacement de l'ancienne.
    Ainsi, tous mes utilisateurs ont la dernière version.

  18. #18
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Effectivement Kloun, c'est exactement de cette manière que j'AIMERAIS fonctionner, mais je l'ai dit précédemment, on ne m'a pas donné le choix de fonctionner de la mauvaise manière

    Par contre, à chaque semaine je fais pression pour passer à la bonne méthode de travail

Discussions similaires

  1. Gérer les dates avec SQL Server 2000
    Par saby dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/01/2006, 18h06
  2. Paralleliser les connexions avec DBI
    Par vodevil dans le forum SGBD
    Réponses: 2
    Dernier message: 26/12/2005, 19h19
  3. Gérer les coupures avec LWP
    Par siaoly dans le forum Modules
    Réponses: 12
    Dernier message: 31/08/2005, 16h54
  4. Où gérer les transactions avec Firebird ?
    Par DMO dans le forum Débuter
    Réponses: 2
    Dernier message: 26/04/2005, 09h21
  5. Gérer les queue avec sql server ?
    Par devdev dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/06/2004, 17h38

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