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 :

Recordset GetRows et blocs [AC-2010]


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 126
    Points
    126
    Par défaut Recordset GetRows et blocs
    Bonjour,

    J'ai attentivement lu le document suivante sur le DAO
    http://warin.developpez.com/access/dao/

    J'ai créer un fichier qui ressemble à l'exemple au point 5.5.2 sur les blocs. La méthode est super mais voila ma question. On dit toujours qu'un Recordset doit être fermé après son utilisation. Or comment faire fonctionner ce fichier si le Recorset est toujours ouvert afin de récupérer la valeur pour passer aux enregistrements suivants. Est-ce qu'une solution est de créer une variable dont l'existence est possible en dehors de la procédure?

    Je sais que fermé un Recorset est plus propre, mais qu'elle est l'impact réelle de le laisser ouvert outre la propreté.

    Merci beaucoup.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je ne suis pas sur de comprendre ta question.
    Si tu ne fermes pas explicitement un recordset dans une procédure il reste ouvert jusqu'à ce que tu sortes de la procédure.
    Après le compliateur le ferme pour toi. C'est se qu'on appelle la portée d'une variable. Elle est "fonctionnelle" et définie à son niveau et généralement pour tous les niveaux subséquents mais dés qu'on quitte le niveau elle est "libérée" et devient indéfinie.
    Le faire soi-même est en effet plus propre car cela libère la mémoire associée dés ce momnet (enfin cela signale au compilateur qu'il peut le faire) et éventuellement les enregistrements verrouillés (ça c'est immédiat).

    L'autre avantage est que cela indique à l'humain qui lit ton code que tu en as fini avec cet objet.
    Avec la vitesse d'éxécution des machines moderne, optimiser pour l'humain est ce qu'il faut faire.
    On ne peut pas le remplacer par une version 2 fois plus puissante tous les 18 mois.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 126
    Points
    126
    Par défaut
    Merci pour ta réponse,

    Ok je comprend la porté du recordset, mais si tu télécharge le fichier Access de l'exemple 5.5.2 de mon post précédent http://warin.developpez.com/access/d...=partie_5#L5.5 , les recordset ne sont pas fermé dans cet exemple pour y recourir ensuite. Si je les fermes à la fin du code, les bouton précédent et suivant ne fonctionne plus. Le recordset demeure donc ouvert tout le temps que le formulaire est ouvert. Je ne trouve pas ça pratique si c'est ton formulaire principale et qui est tout le temps ouvert. La solution pour fermé le recorset entre deux appel est de stocker une variable dans une textbox du formulaire pour les appels suivants (afin d'indiquer la position du curseur dans le getrows).

    est-ce que ma solution est bonne ou je devrais faire autrement?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    En fait tant que ton formulaire est ouvert, c'est que tu manipules les données associées et donc il est logique de garder le recordset ouvert.
    De plus, ouvrir et fermer un recordset (sans compter retrouver ta position) est "coûteux" en temps d'éxécution.

    Bon personnellement je ne faits sert jamais de cela pour mes formulaires.
    Je fais des formulaire liés et Access se charge de gérer les détails.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 126
    Points
    126
    Par défaut
    Super, je suis donc sur la bonne voie.

    Je croyais que de faire des formulaires et sous-formulaire sur des requêtes étaient plus problématique lors du déploiement de l'application en Frontale-Dorsale en mode Multi-utilisateur. Il ne vaut pas mieux utiliser des recordset?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Pas vraiment.

    De toute façon en interne Access utilise des recordsets.
    Donc là tu t'embêtes à refaire ce que les ingénieurs de M$ ont mis au point depuis des années.
    Ce peut-être un bon exercice mais je n'y vois pas d'intérêt en dehors de cela.

    Le seul avantage d'utiliser des recordsets est si tu veux dépasser les 5 utilisateurs en lecture/écriture simultanément.
    Et là apparement qu'il vaut mieux utiliser la bibliothèque ADO qui permet des recordsets déconnectés.
    J'ai eu connaissance d'une appli qui permet d'avoir 200 utilisateurs mais qui travaille chacun sur leur enregistrement.
    D'après ce que je sais elle n'ouvre la connexion que le temps de mettre à jour cet enregistrement.
    Mais c'est un cas particulier ou l'utilisateur se focalise juste sur un dossier.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. GetRows : Récupérer le contenu d'un RecordSet ADO dans un tableau
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/06/2014, 10h13
  2. Recordset, Getrows et Join(tableau,"")
    Par Brasileiro dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/08/2011, 10h37
  3. Périphérique de bloc
    Par MAGNUM_HEAD dans le forum Administration système
    Réponses: 4
    Dernier message: 20/03/2003, 19h04
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 10h00
  5. [ADO] Sauvegarde / lecture de recordset
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/09/2002, 16h54

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