Connexion fermée à quel moment? [Résolu]

js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 30 juil. 2009 à 01:25 - Dernière réponse : js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention
- 1 août 2009 à 09:47
Bonjour à tous,

j'aimerai savoir s'il est meilleur pour une application en réseau (donc avec plusieurs utilisateurs, VB 6.0/Access) d'ouvrir une connexion à une BD une bonne fois pour toute (dans un module) et qu'on fermera lorsqu'on quitte l'application ou bien de l'ouvrir dans chaque formulaire et la refermer lorsqu'on quitte le formulaire. Merci d'avance de votre aide. Je n'arrive pas à me décider.

Cordialement.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 31 juil. 2009 à 14:54
3
Merci
je crée une instance différente par formulaire et pour chaque utilisateur (si oui c'est quoi une instance s'il te plaît?)


chaque utilisateur lance ton programme
c'est bien une instance du programme puisque chacun a son exe et son pc...
par contre comme tu as CNX en public, chaque "utilisateur" (donc chaque exe) partage son unique connexion entre chacun de SES formulaires

raisons évoquées au dessus, tu ne dois pas.
il faut avoir plusieurs INSTANCES, c'est à dire un classe, qui sera déclarée et initialisée sur chaque formulaire

à toi ensuite d'optimiser la classe

pour les RS, aussi dans la classe
tu peux ensuite te faire des méthodes pratiques retournant directement un résultat de requête ou le RS lui-même
là encore çà dépend de ton code et de l'usage de l'appli


pour les options multi à utiliser, je ne sais plus s'il faut aussi les définir sur la base ou que sur les RS...
j'ai toujours laissé l'accès base par défaut, et les RS ainsi :

adOpenDynamic, adLockOptimistic

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 31 juil. 2009 à 21:17
3
Merci
[quote=js8bleu]30 instances = 30 connexions de noms différents à la BD/quote

ou plus (connexions) : autant de connexions que de requêtes
pas de nom différent pour autant !!!

il doit y avoir un souci de conception/visualisation

regardons différemment :

tu poses une textbox sur un formulaire
tu as bien une zone de saisie (fond blanc, écriture noir, caret (curseur), et tu peux y entrer des chaines

tu en poses une seconde
même chose....

tu change la couleur de l'écriture (forecolor) de la zone1 => la zone2 n'est pas affectée

pourtant le code depuis le control TEXTBOX est bien le même...
il n'y a pas 50 codes différents en supposant qu'on va en poser 2, 4, ou 50

chaque textbox posée sur ta form est bien une instance de la classe (ou control) textbox

ici c'est pareil, tu vas créer une classe unique, qui sera instanciée. le nom n'y change rien, ni le nombre de form, ni le nombre de lancement de ton application sur 1 ou plusieurs ordinateurs

c'est plus clair?

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 juil. 2009 à 02:36
0
Merci
salut,
çà dépend de ton nombre d'utilisateurs simultanés, des accès (verrouillé pendant connexion), etc

si tu as pas mal de connexion pour peu de requêtes (du moins pas à la chaîne), tu peux même ouvrir et fermer la connexion à chaque requête. si tes objets sont correctement gérés çà ne se sentira même pas en temps d'execution sur un lan classique

++
[hr]
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 30 juil. 2009 à 02:58
0
Merci
Bonjour et Merci PCPT pour ton intervention. Disons que c'est pour une quinzaine d'utilisateurs. Ce que je fais :

- J'ai créé un module où se trouve les code de connexion suivant :

Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public rsClt As New ADODB.Recordset

*****************************************************************
Public Sub connect()
Set cn = New ADODB.Connection
cn.Provider = "microsoft.jet.oledb.4.0"
cn.ConnectionString = "\\ServeurBD\BDs\BDPharma.mdb"
cn.Open
End Sub

*****************************************************************
Public Sub disconnect()
cn.Close
End Sub


- Dans le Load d'un formulaire qui interagit avec la BD j'appelle la connexion (que je referme au Unload du formulaire) puis je déclare un recordset que je referme après utilisation.

connect

*****************************************************************
Dim rs1 As New Recordset
rs1.Open "select * from Tableproduit where desproduit like '" & txtproduit & "%' order by(desproduit) ", cn

*****************************************************************
rs1.Close

*****************************************************************

- Dans le Unload du formulaire je saisi

disconnect


Quand donc dois-je fermer la connexion ouverte s'il vous plaît (car j'ai peur de fermer la connexion à la fermeture du formulaire alors que d'autres utilisateurs sont connectés sur ce même formulaire) ? Merci d'avance.

NB : Tous vos très précieux conseils seront les bienvenus.

Cordialement.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 juil. 2009 à 03:35
0
Merci
... sur leur formulaire mais sur leur poste, donc une instance différente de l'application

sous le CN.CLOSE tu peux ajouter set cn = nothing
tu peux aussi le passer en private apparemment


pourquoi dans ton module tu as un rs et un rsClt alors que tu ne les utilises pas?

et si tu n'as que des SELECT (pas d'écriture), tu peux passer le tout en module de classe et n'utiliser qu'une seule méthode, disons ExecuteSQL, qui elle va faire le connect, la requête en paramètre, le disconnect, et te renvoyer un objet RS

++
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 30 juil. 2009 à 09:10
0
Merci
OK Merci pour tes très précieux conseils. Seulement je n'ai pas trop compris
... sur leur formulaire mais sur leur poste, donc une instance différente de l'application
. Pour le reste il n'y a pas de problème j'ai bien compris et je le ferais. Merci de bien vouloir m'expliquer (si possible car je sais que vous êtes très occupé) votre première phrase. Merci d'avance.

NB : Pour ce qui est de rsClt, je ne vous ai envoyé qu'une partie du code sinon il s'agit d'un recorset que j'utilise en plus de rs. J'ai d'insertion (insert into) que de select.

Cordialement.
Commenter la réponse de js8bleu
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 30 juil. 2009 à 09:44
0
Merci
Salut,

... sur leur formulaire mais sur leur poste, donc une instance différente de l'application


en réponse à :

(car j'ai peur de fermer la connexion à la fermeture du formulaire alors que d'autres utilisateurs sont connectés sur ce même formulaire)


@+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 31 juil. 2009 à 13:02
0
Merci
Bonjour et Merci Mayzz pour ton intervention. Est-ce à dire que :

COMME J'OUVRE UNE CONNEXION LORSQUE J'OUVRE UN FORMULAIRE ET QUE JE LA REFERME LORSQUE JE QUITTE LE FORMULAIRE, SI PAR EXEMPLE TROIS(3) UTILISATEURS TRAVAILLENT EN MÊME TEMPS SUR UN MÊME FORMULAIRE ET QU'UN DES TROIS QUITTE (DONC PAR CONSÉQUENT FERME LA CONNEXION PUISQU'IL A QUITTE LE FORMULAIRE) ALORS QUE LES DEUX AUTRES SONT ENCORE ENTRAIN DE TRAVAILLER SUR LE MÊME FORMULAIRE (DONC SENSÉ ÊTRE CONNECTÉ) EST-CE QU'IL RISQUE D'Y AVOIR UN PROBLÈME OU NON?

EST-CE QUE L'UTILISATEUR QUI A QUITTÉ A SEULEMENT FERMÉ SA CONNEXION ET NON CELLE DES AUTRES? VRAIMENT MERCI DE BIEN VOULOIR ÉCLAIRER MA LANTERNE./b

MERCI D'AVANCE.

CORDIALEMENT.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 31 juil. 2009 à 13:30
0
Merci
[quote=PCPT]çà dépend (...) des accès (verrouillé pendant connexion)/quote

si tu es en accès exclusif, une erreur sera relevée lors de la tentative d'accès d'un utilisateur, ce depuis n'importe quel formulaire, tant qu'il y a un accès à la base, de n'importe qui

sinon (mode multi), chacun ferme en effet uniquement sa connexion
cependant il peut y avoir un problème avec ton fonctionnement

tu ouvres la connexion au chargement d'un formulaire, et la ferme lors de la destruction du formulaire, c'est bien çà?
avec un connexion qui est public, une seule pour tous les formulaires

ok...
formulaire1, click pour ouvrir le formulaire2 et quitter le 1 =>

form2.show
unload me


form2 va ouvrir la connexion qui est déjà ouverte
=>pas forcément de bug mais çà ne sert à rien
et le unload de form1 va fermer la connexion utile pour form2
=> bug à la prochaine requête


on en revient à ce que je t'ai proposé précédemment
voir cet exemple pour avoir une idée

++
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 31 juil. 2009 à 14:24
0
Merci
Bonjour et Merci PCPT pour ton aide. C'est justement ce que tu m'as proposé que je n'ai pas compris. J'aimerai bien adopter ta méthode mais je t'assure que je n'ai pas compris ce que tu me conseilles. Ce que je crois avoir compris c'est que tu aimerais que je crée une instance différente par formulaire et pour chaque utilisateur (si oui c'est quoi une instance s'il te plaît?), pas de problème pour la fermeture de la connexion (set cn = nothing). Pour les SELECT tu me conseilles de les déclarer dans une seule méthode (dans un module) et que j'appellerai chaque fois en cas de besoin au lieu de déclarer les mêmes recordset dans chaque formulaire à chaque fois. Quelle option faut-il utiliser pour le mode multi utilisateur s'il te plaît? Merci d'avance.

Cordialement.
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 31 juil. 2009 à 17:48
0
Merci
Merci PCPT, je pense avoir enfin compris. Récapitulatif tu me conseilles de :

- Créer une instance pour chaque formulaire (donc 30 formulaires 30 instances 30 connexions de noms différents à la BD) ;

Mais est-ce que tu pense que cette solution permettra de gérer 10 utilisateurs d'être sur le même formulaire en même temps donc d'utiliser la même connexion ou bien cela ne causera pas de problème?

NB : Concernant les RecordSet j'utilisais adOpenStatic, adLockOptimistic mais maintenant j'irai avec adOpenDynamic, adLockOptimistic. Merci beaucoup.

Merci d'avance.

Cordialement.
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 1 août 2009 à 09:47
0
Merci
Oui c'est clair. Merci beaucoup PCPT. Je vais donc suivre tes conseils faire les tests et espérer que je serais à la hauteur. C'est vraiment très gentil de ta part. Merci pour ton altruisme. Excellente journée et prends bien soin de toi.

Cordialement.
Commenter la réponse de js8bleu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.