Vba access - creation d'un recordset avec un nom "variable"

Résolu
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014 - 5 sept. 2012 à 09:26
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014 - 5 sept. 2012 à 16:39
Bonjour,
Je voudrais pouvoir créer un recordset dont le nom serait "variable", par exemple la concaténation d'une partie fixe (adorsxxx) et d'une partie variable, qui serait, par exemple, le nom de l'utilisateur.

Voici un exemple de fonciton dans que j'utilise pour chercher si un enregistrement existe dans une table.
dbsql représente la clause select (exemple dbsql "select * from client where clicod 'toto')


[i]Public Function dbquery(dbsql)
Dim adorsxxx As New ADODB.Recordset
adorsxxx.Open dbsql, dbcnx, adOpenDynamic, adLockOptimistic
If adorsxxx.RecordCount = 0 Then
dbquery = 0
Else
dbquery = 1
End If
adorsxxx.Close
Set adorsxxx = Nothing
End Function/i

Je voudrais pouvoir remplacer adorsxxx (qui est fixe, par une variable qui serait la concaténation de "adorsx" et d'une variable (par exemple le nom de l'utilisateur) qui serait passée en paramètre dans la fonction, ou qui serait contenue dans une variable globale.

Je ne trouve de réponse nulle part, help !

Damedom

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 sept. 2012 à 16:09
Même si plusieurs utilisateurs lancent la même Sub, les objets déclarés à l'intérieur restent des objets indépendants.
Je ne comprends pas grand chose à ta motivation de changer le nom du RecordSet, maintenant tu parles de fichier ... confus.
Fichier de quoi ?

Oui, il y a même une catégorie de question VBA (en tenir compte la prochaine fois : VB6/langages dérivés/VBA
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 sept. 2012 à 12:24
Salut

Je ne pense pas que ce soit possible puisque cet objet doit être défini/dimensionné à un moment donné.
Puisque adorsxxx est dimensionné à l'intérieur de la Sub, quel est l'intérêt de vouloir lui donner un nom particulier ?
Cet objet cessera d'exister (avec son contenu) à la sortie de la Sub.

Si tu nous expliquais la raison de ce besoin, il y aurait surement une réponse adéquat.

Si tu veux passer un objet RecordSet dans la Sub, il suffit :
- de le dimensionner à l'extérieur de la Sub, en Public dans un module, par exemple
- de passer l'objet (et pas son nom) dans les paramètres
Ce qui donnerait :
Public Function dbquery(dbsql As String, _
                        monRecordSet As ADODB.Recordset) As Byte
    monRecordSet.Open dbsql, dbcnx, adOpenDynamic, adLockOptimistic
    If monRecordSet.RecordCount = 0 Then
        dbquery = 0
    Else
        dbquery = 1
    End If
    monRecordSet.Close
    ' Set adorsxxx = Nothing
End Function 
et de l'appeler en fournissant l'objet :
MsgBox "Résultat : " & CStr(dbquery("Select ...", adorsToto))
en supposant que adorsToto ait été dimensionné
Public adorsToto As ADODB.RecordSet
(ou Private/Dim)

PS : Quand tu colles du code, merci d'utiliser la coloration syntaxique (3ème icone à droite) = plus facile à relire et conserve les indentations

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
5 sept. 2012 à 15:52
Dans un environnement multi-utilisateurs, j'utilisais les recordsets "temporaires" pour aller vérifier qu'un enregistrement existe déjà (ou non) puisque dans ACCESS2010 je ne peux pas faire de find avec une clé comportant deux éléments. C'était donc une utilisation extrêmement temporaire qui ne risquait pas de gêner un autre utilisateur.
J'ai aujourd'hui un problème plus gênant.
Dans le cadre du sous-formulaire d'un formulaire de saisie, j'utilise le fichier temporaire comme base d'un sous-formulaire (qui sera ensuite utilisé pour créer n enregistrements dans un fichier). C'est en fait comme une proposition de retour de marchandises d'une usine, en fonction de pièces qui lui ont été livrées pour traitement.
Ce fichier temporaire va donc exister tout le temps de la saisie de la feuille de "retour", et j'ai peur que ça bloque d'autres utilisateurs ou, pire, que cela s'emmêle avec un autre fichier temporaire avec le même nom créé pour la même raison. Et j'avais pensé à donner un nom "modulable" à ce fichier, afin de pouvoir l'ouvrir et le fermer LUI. Que va-t-il se passer lorsque je ferme le fichier 1 alors qu'un autre utilisateur travaille sur le fichier 2, alors qu'ils sont le même nom et passent dans la même sub ?

En fait je veux travailler sur une image de mon fichier de base, qui sert de proposition de saisie. Il n'est pas modifié. As-tu une autre idée ?

Merci en tout cas, et je ne savais pas que le VBA était "colorisable" dans les questions posées. Je le ferai la prochaine fois.


Damedom Sologne
0
damedom41 Messages postés 79 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 2 août 2014
5 sept. 2012 à 16:39
Désolée, je suis une vieille de l'époque de Cobol, où on parlait de fichiers. De temps en temps, ça me reprend.
Il s'agit bien de recordsets, et ta réponse me rassure tout à fait.

Merci encore


Damedom Sologne
0
Rejoignez-nous