Vba access - creation d'un recordset avec un nom "variable" [Résolu]

damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 5 sept. 2012 à 09:26 - Dernière réponse : damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 5 sept. 2012 à 16:09
3
Merci
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

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 5 sept. 2012 à 12:24
0
Merci
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)
Commenter la réponse de cs_Jack
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 5 sept. 2012 à 15:52
0
Merci
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
Commenter la réponse de damedom41
damedom41 79 Messages postés mercredi 14 avril 2010Date d'inscription 2 août 2014 Dernière intervention - 5 sept. 2012 à 16:39
0
Merci
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
Commenter la réponse de damedom41

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.