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 :

Affecter un recordset à un formulaire [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Par défaut Affecter un recordset à un formulaire
    Bonjour à tous,
    pour des raisons de rapidité, j'ouvre un recordset avec un texte SQL et je teste le nombre d'enregistrements (recordcount) si = 0, je passe à la suite
    sinon, je voudrai ouvrir un formulaire basé sur ce recordset.
    je sais faire ça en attribuant le texte SQL à la propriété recordsource. mais il me semble que cette requête doit être re-moulinée à ce moment là
    Y a t il une solution pour affecter directement le recordset déjà constitué à la source du formulaire?
    merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Par défaut
    Bonjour,
    j'aurais tendance à penser à qqe chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim strSQL As String
    Dim rst As DAO.Recordset
     
    strSQL = "SELECT * FROM MaTable;"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    rst.MoveLast
     
    If rst.RecordCount = 0 Then
        ......
    Else
        DoCmd.OpenForm "MonFormulaire", acNormal, , , acFormEdit, acWindowNormal
        With Forms("MonFormulaire")
            .RecordSource = strSQL
            .Requery
        End With
    End If

  3. #3
    Membre Expert
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Par défaut
    Merci pour la rapidité!!
    c'est bien la méthode que j'utilise pour le moment
    mais j'ai l'impression que Access résout des fois le SQL, une pour alimenter le recordset, une pour alimenter le formulaire.
    Et comme chaque formulaire possède son recordset, qu'on peut d'ailleurs récupérer (Rs = forms!mon_form.recordset), je cherche à faire le contraire (forms!mon_form.recordset = Rs)
    là, j'ai une erreur: 3251 Opération non autorisée pour ce type d'objet

    je cherche donc la bonne solution

    PS: ces requêtes (à l'origine du SQL) sont des recherches d'erreurs et il y en a une trentaine pour le moment ce qui fait que ma première méthode de requêtes-ajouts dans une table et formulaire sur cette table est bien lente!!

  4. #4
    Membre émérite
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Par défaut
    Y a t il une solution pour affecter directement le recordset déjà constitué à la source du formulaire?
    Je n'y crois pas, d'ailleurs "Opération non autorisée pour ce type d'objet".

    Quand tu dis
    pour des raisons de rapidité, j'ouvre un recordset avec un texte SQL et je teste le nombre d'enregistrements (recordcount) si = 0, je passe à la suite
    Tu fais un MoveLast pour tester le RecordCount ? Parce que si oui, tester le EOF suffirait à te dire si tu as au moins un enregistrement sans aller jusqu'au bout du RecordSet.

  5. #5
    Membre émérite
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Par défaut
    Maintenant, si ton ouverture de requête est vraiment longue par rapport aux sorties attendues (des erreurs, ça doit être rare), au point que la multiplier par deux est gênant, alors fais une table temporaire avec le résultat et ouvre le formulaire dessus.

  6. #6
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Je crois que c'est à ça que tu pensais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Compare Database
    Option Explicit
     
    ' Recordset global
    Dim rsFm As DAO.Recordset
     
     
    Private Sub Form_Load()
    Dim sSql As String
    ' Ouvrir le recordset global
    sSql = "SELECT * FROM Clients"
    Set rsFm = Application.CurrentDb.OpenRecordset(sSql, dbOpenDynaset)
    ' En faire la source du formulaire
    Set Me.Recordset = rsFm
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
    ' Déconnecter le formulaire du recordset
    Set Me.Recordset = Nothing
    ' Libérer/fermer le recordset global
    Set rsFm = Nothing
    End Sub
    Ce que j'ai fait :
    - J'ai créé un formulaire basé sur la table Clients.
    - J'ai supprimé la source du formulaire (mise à blanc de la propriété Données>Source qui contenait «Clients»)
    - J'ai ajouté le code ci-dessus.

    A+

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

Discussions similaires

  1. Affecter varleur d'un formulaire à une variable
    Par 30avril1989 dans le forum IHM
    Réponses: 1
    Dernier message: 26/06/2010, 16h51
  2. [Toutes versions] Affecter une valeur sur formulaire à un champ du sous formulaire
    Par jerem2007 dans le forum IHM
    Réponses: 1
    Dernier message: 18/03/2010, 19h22
  3. Access - vba recordset sous-formulaire
    Par jedi186 dans le forum VBA Access
    Réponses: 17
    Dernier message: 01/06/2008, 13h02
  4. Réponses: 11
    Dernier message: 16/12/2005, 14h44
  5. Affecter un recordset à un autre ?
    Par _developpeur_ dans le forum Access
    Réponses: 2
    Dernier message: 22/10/2005, 10h22

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