Dim ou Set, lequel choisir?

Résolu
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
- 3 oct. 2009 à 03:28
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
- 3 oct. 2009 à 04:59
Bonjour tout le monde,

Si j'ai bien compris :

dim rs As New ADODB.Recordset


est une classe.

Set rs = New ADODB.Recordset


est une instance de la classe ci-dessus.

Est-ce que cela est bien plus "léger" et rapide de procéder comme ci-dessus plutôt que de faire comme ceci :

dim rs As New ADODB.Recordset


Merci d'avance.

Cordialement.

12 réponses

PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
3 oct. 2009 à 04:12
salut,

une classe est un objet
un objet n'est pas forcément une classe

de ce point, certains objets ne sont pas instanciable par NEW, c'est pourquoi les 2 syntaxes co-existent

dans ton cas tu peux directement faire :
dim rs As New ADODB.Recordset

qui est le raccourci des 2 lignes (dim + set)

[hr]
3
PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
3 oct. 2009 à 04:36
"partagé" je veux dire un RS déclaré en public dans un module par exemple

non pas de fermeture commune :
1 -> tu fermes un objet de REQUÊTE, aucune interaction sur la DB
2 -> application EN réseau veut dire que ton exe est sur un disque partagé n'est-ce pas (pas que tu as fait une appli client-serveur).
il y a donc autant d'instances de ton EXE que d'utilisateurs, chacun ferme alors SES objets (par ton code)

c'est le principe même de "une instance"

si tu lances 2 calculatrices, le résultat d'une opération ne va pas sur les 2 instances mais bien uniquement sur celle que tu utilises

c'est pareil
++
3
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 03:39
Juste pour préciser qu'il s'agit d'un cas d'une application en réseau. Merci d'avance.

Cordialement.
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:15
Bonjour et Merci PCPT pour ton aide. J'aimerai juste savoir si tu sais pourquoi utiliser :

If cn.State <> adStateClosed Then cn.Close
If rst.State <> adStateClosed Then rst.Close


avant d'ouvrir une connexion ou un recordset tout en sachant justement que la connexion ou le recordset seront ouvert tout juste après?

Merci d'avance.

Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
3 oct. 2009 à 04:21
pour ne fermer l'objet que s'il ne l'est pas déjà

on fait çà avant de détruire (plus propre), et uniquement sur un RecordSet partagé

c'est à dire que si tu fais 2 requêtes à la suite sur le même RecorSet effectivement il ne faut pas fermer CN entre les deux, juste sur RST
0
PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
3 oct. 2009 à 04:22
nb : et dans ce cas (entre les 2 requêtes) çà sera juste RST.CLOSE, pas besoin de tester, on sait qu'il est ouvert
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:28
Lorsque tu parles de recordset partagé, je suppose que tu veux également parler du cas d'une application en réseau. Mais en utilisant le .State comme ci-dessus, ça ne risque pas de fermer ce même recordset utilisé par un autre utilisateur sur une autre machine?

Merci d'avance.

Cordialement.
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:39
donc un simple rst.close ne suffit pas pour fermer le recordset?
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:43
En fait ce que je fais je compile mon application VB que j'installe sur chaque PC client puis je crée un dossier partagé sur le serveur et j'y mets la BD avec comme autorisation de lecture/écriture pour tout le monde. ça peut marcher aussi comme ça?

Merci d'avance.

Cordialement.
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:47
je veux parler de ces histoires d'instances dans mon cas.
0
PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
3 oct. 2009 à 04:52
... j'ai déjà répondu
samedi 3 octobre 2009 à 04:22:24
0
js8bleu
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3 oct. 2009 à 04:59
OK, Merci PCPT. Je ne sais pas si tu as compris ma dernière question, en fait c'était juste pour savoir si ma manière d'installer mon application en réseau était bien et ne causerai pas de problème particulier (je n'ai jamais fait une application multi-utilisateur, je suis sur mon premier qui est toujours en phase de concerption). Merci d'avance et excellente soirée.

Cordialement.
0