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

VBA Access Discussion :

Problème avec un recordset


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut Problème avec un recordset
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre. En effet, je veux effectuer une recherche dans une table et afficher le résultat dans un formulaire.

    Tout se passe bien mais la recherche ne me donne toujours qu'un seul résultat

    J'ai dû louper quelque chose.

    Voici une partie de mon code avec ACCESS 2000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim rechnom As DAO.Recordset
        dg = Chr$(34)
        recherchenom = dg & "*" & Me!NOMMEMBRE & "*" & dg
        REQ1 = "SELECT * FROM membres WHERE nommembre like " & recherchenom
        Set rechnom = CurrentDb.OpenRecordset(REQ1, dbOpenDynaset)
     
        If rechnom.RecordCount > 0 Then
            MsgBox rechnom.RecordCount
    En fait, je souhaiterai pouvoir utiliser les boutons de navigation des enregistrements en bas de la page pour passer d'un enregistrement à l'autre.

    Par exemple, je voudrais rechercher tous les JEAN

    Merci de votre aide. Je suis un programmeur occasionnel et autodidacte alors parfois ça peut vous paraître con mais on perd vite beaucoup de temps à chercher.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 029
    Points : 24 584
    Points
    24 584
    Par défaut
    Bonjour,

    Regarde cette discussion c'est exactement ce que tu cherches à faire.

    http://www.developpez.net/forums/d66...ess/sql-macro/

    La plupart des demandes simples ont déjà été traité dans le forum, dans la faq ou dans les tutos. Une petite recherche est la meilleure option.

    Cordialement,

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Avant de poster j'ai bien entendu effectué des recherches sur recordset mais je n'ai rien trouvé qui pouvait m'aider

    C'est une solution qui pourrait fonctionner mais ça n'explique pas pourquoi mon recordset donne toujours 1 seul enregistrement au lieu de me donner le bon résultat comme lorsque j'effectue une requête en mode SQL

    La solution avec recordset me semble beaucoup plus rapide à programmer

    Dans une autre application, j'utilise des recordset sans aucun soucis et je préfère continuer d'utiliser cette solution quitte à y passer du temps

    Merci quand-même pour la réponse car cela pourrait servir une autre fois.

    Si quelqu'un a une solution ou un début de solution, je suis preneur.

    Merci d'avance

  4. #4
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Ta réponse est peut être dans la : Comment chercher les enregistrements contenant une certaine chaîne ? (LIKE)

    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    cela confirme l'intérêt d'un recordset

    la base de données est utilisée en réseau par 2 PC

    j'avais testé sans recordset et ça ramait déjà alors que je n'avais que quelques centaines d'enregistrements.

    J'ai adapté une bonne partie de l'application avec des recordset mais ici je cale alors que j'ai utilisé les mêmes techniques que dans les autres parties de l'application.

    La seule différence ici, c'est que je dois trouver plusieurs enregistrements alors que dans les autres cas, je ne traitais à chaque fois qu'un seul enregistrement.

    Je continue de chercher

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 029
    Points : 24 584
    Points
    24 584
    Par défaut
    Si avec 2 pc et une centaine d'enregistrements ça rame déjà je te conseille vivement de lire le tuto sur l'optimisation...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    c'est ce que j'avais fait à l'époque et modifié en conséquence

    il m'est arrivé d'utiliser l'application avec 2 PC fixes + 2 portables

    et dans ce cas, l'utilisation des recordset améliore franchement les performances de manière très visible

    J'ai oublié de préciser que seul le pc qui contient la base de données est "fixe"

    En effet, le second "ordinateur" peut changer en fonction de la personne qui utilise le prog (soit un PC de bureau, soit un programme) et parfois il y en a un 3e voire un 4e. Lorsqu'il n'y en a que 2, ils sont tous les 2 équipés de 2 écrans car 1 seule personne doit faire plusieurs (en rapport avec la base de données) + d'autres encore qui n'ont rien à voir avec l'informatique d'ailleurs
    C'est pour faciliter son travail que tout est affiché sur les différents écrans.

    En plus, elle n'a que des connaissances très basiques de l'informatique.

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    RecordCount ne renvoie pas la même information selon le type de recordset (dynaset, snapshot, table).
    Pour le type table (dbOpenTable), il s'agit bien du nombre total d'enregistrements.
    Pour les autres, la valeur renvoyée est celle du plus grand numéro d'enregistrement auquel on a accédé.
    Par conséquent, juste après l'ouverture du recordset, le seul enregistrement parcouru étant le premier, RecordCount renvoie 1.
    Pour contourner ceci, il faut utiliser MoveLast.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If rechnom.RecordCount > 0 Then
           rechnom.MoveLast
           rechnom.MoveFirst
           MsgBox rechnom.RecordCount
           ' ...
        End If
    A+

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Bonjour,

    RecordCount ne renvoie pas la même information selon le type de recordset (dynaset, snapshot, table).
    Pour le type table (dbOpenTable), il s'agit bien du nombre total d'enregistrements.
    Pour les autres, la valeur renvoyée est celle du plus grand numéro d'enregistrement auquel on a accédé.
    Par conséquent, juste après l'ouverture du recordset, le seul enregistrement parcouru étant le premier, RecordCount renvoie 1.
    Pour contourner ceci, il faut utiliser MoveLast.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If rechnom.RecordCount > 0 Then
           rechnom.MoveLast
           rechnom.MoveFirst
           MsgBox rechnom.RecordCount
           ' ...
        End If
    A+

    Merci de l'info et de ton aide. J'étais justement en train de lire à ce sujet.

    Je n'ai plus qu'à potasser

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 029
    Points : 24 584
    Points
    24 584
    Par défaut
    Quelle architecture utilises-tu avec cette application ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par loufab Voir le message
    Quelle architecture utilises-tu avec cette application ?
    Pouvez-vous préciser la question ?

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 029
    Points : 24 584
    Points
    24 584
    Par défaut
    Comment le/les fichiers ACCESS sont organisés sur le ou les postes, le partage...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Bonjour,

    RecordCount ne renvoie pas la même information selon le type de recordset (dynaset, snapshot, table).
    Pour le type table (dbOpenTable), il s'agit bien du nombre total d'enregistrements.
    Pour les autres, la valeur renvoyée est celle du plus grand numéro d'enregistrement auquel on a accédé.
    Par conséquent, juste après l'ouverture du recordset, le seul enregistrement parcouru étant le premier, RecordCount renvoie 1.
    Pour contourner ceci, il faut utiliser MoveLast.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If rechnom.RecordCount > 0 Then
           rechnom.MoveLast
           rechnom.MoveFirst
           MsgBox rechnom.RecordCount
           ' ...
        End If
    A+

    Bien vu !
    Maintenant le recordcount me donne une valeur différente de 1 et je présume que c'est bien le nombre d'enregistrements concernés.

    Me reste plus qu'à rajouter des boutons de navigation pour passer d'un enregistrement à l'autre

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par loufab Voir le message
    Comment le/les fichiers ACCESS sont organisés sur le ou les postes, le partage...
    Et bien il y a un PC fixe qui contient la base de données + les photos en rapport avec les enregistrements

    Ces 2 dossiers sont partagés tout simplement via le partage de Windows

    J'avais commencé à éclater la base données pour alléger le PC fixe mais comme pour des raisons évoquées plus haut, j'ai laissé ça de côté.

    J'ai donc utilisé des recordsets et créé 2000 enregistrements bidons & testé avec 4 ordinateurs en même temps.

    Cela ne perturbe absolument pas les recherches & accès à la table membres (j'utilise un lecteur code-barres & un lecteur RFID)

    Le 1er PC est réservé pour l'affichage des infos à l'écran. Cette partie de l'application doit tourner sans clavier et sans souris et donc sans aucune intervention de l'utilisateur car l'écran n°1 et les lecteurs codebarre & RFID se trouvent dans une autre pièce. La personne en charge peut intervenir car elle dispose d'un 2e écran ainsi que le clavier et la souris. Le second PC permet d'encoder les nouveaux membres + recherches diverses ainsi que le renouvèlement des cartes de membres + prise d'une photo avec une webcam + lecture carte d'identité EID + impressions diverses + lecture codebarre.

    Parfois une 2e personne se trouve sur place avec un portable. Elle s'occupe de prendre les photos + encoder la carte attribuée au nouveau membre + photocopier une pièce d'identité, ... pour alléger le travail de la 1ère

    Le problème suivant se pose :

    Il y a parfois 25 personnes qui se pointent en même temps. arghhhh
    Plus on s'énerve, plus on rate certaines choses.

    Je fais tout pour que mon application puisse être utilisée par des utilisateurs n'ayant parfois aucune connaissance informatique ! c'est déjà tout juste pour démarrer le prog

    Je suis allé plusieurs fois sur place pour "former" la personne en charge mais elle a déjà été remplacée plusieurs fois (piquait dans la caisse peut-être ???)

    Depuis la première version, j'ai tout fait pour aider à accélérer l'encodage des membres, ... renouvèlement des cartes de membres en 1 clic (un scan du codebarre + un clic pour renouveler). J'ai aussi proposé plusieurs idées refusées car trop compliquées pour eux.

    J'imprime les cartes moi-même, une face imprimée et au verso un code barre et donc pas de perte de temps pour l'impression.

    En fait, j'ai amélioré toutes les parties de mon application. Récemment, on m'a demandé une nouvelle "option". Si quelqu'un oublie sa carte, il a droit à une exception (pouvoir rentrer sans sa carte) à partir du moment où il a été identifié et donc je travaille à améliorer la recherche sur base du nom ou du prénom (la plupart du temps, il n'ont pas leur carte d'identité) et comme plusieurs personnes différentes ont encodés les noms, il y a parfois dans le champ NOM le prénom puis le nom ou l'inverse. Ces données ont parfois été encodées à partir d'un lecteur EID ou à partir de fiches remplies à la main d'où d'éventuelles imprécisions.

    En bref, les utilisateurs changent et ne respectent pas les consignes que je donne et ne sont pas concentrés non plus sur leur "travail".

    Une fois cette dernière partie recherche, je vais m'attacher à optimiser la base de données.

    J'ai un emploi du temps super chargé (je travaille 6 jours sur 7) & je n'ai le temps que m'en occuper que le dimanche et encore ... je n'ai jamais eu de cours de Access ni eu le temps de lire un livre complètement ce qui peut expliquer certaines lacunes grosses comme des maisons

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 029
    Points : 24 584
    Points
    24 584
    Par défaut
    Pour éviter les corruptions de la base et accélérer les temps de réponses il faut, en multiposte, fonctionner avec une architecture Frontal/Dorsal.

    Regarde le tuto sur le partage d'application et celui sur l'optimisation. Si ça t'intéresse.

Discussions similaires

  1. Problème avec un recordset
    Par david71 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/02/2008, 14h53
  2. Problème avec adodb.recordset
    Par Pierre Fauconnier dans le forum VB.NET
    Réponses: 4
    Dernier message: 07/05/2007, 15h43
  3. Problème avec le recordset
    Par mademoizel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/03/2007, 12h28
  4. Problème avec un RecordSet
    Par Oberown dans le forum ASP
    Réponses: 4
    Dernier message: 04/01/2007, 11h59
  5. Problème avec ADODB.Recordset
    Par Edouard Kaiser dans le forum ASP
    Réponses: 13
    Dernier message: 09/08/2005, 17h54

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