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 :

utilisation des recordset


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut utilisation des recordset
    J'ai un souci avec l'utilisation des recordset
    voici mon code :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub pec_Exit(Cancel As Integer)
     
    'Déclarations obligatoires et préalables
    ' il est nécessaire de cocher la biblothèque dao
      Dim db As DAO.Database
      Dim rs1 As DAO.Recordset
    'Variables locales
      Dim mmontant As Double
      Dim Mesures As String
      Dim mnum As Double
      Dim sql As String
      'valorisation du pacage
       mnum = Me!num
      'valorisation du sql
      'sql = "Select * from [marequete] where num =  " & mnum
      sql = "Select * from [marequete] "
      Set db = Application.CurrentDb
      Set rs1 = db.OpenRecordset(sql)
      'mise a zéro du mmontant
      mmontant = 0
      DoCmd.Requery
    'Logiquement Access doit commencer par traiter le 1er enregistrement
    'Mais il est préférable de s'en assurer
      rs1.MoveFirst
      'Pour vérifier le fonctionnement de notre procédure
       'Ici, débute la boucle
      Do
    'On injecte le contenu du champ dans une variable
        mmontant = mmontant + rs1(4)
    'On passe à l'enregistrement suivant
       rs1.MoveNext
    'Et ceci jusqu'à la fin du recordset
      Loop Until rs1.EOF = True
    ' on ecrit le montant total ds la zone texte tot_montant
    Me!TOT_MONTANT = mmontant
     
    End Sub
    lorsque dans la requete "marequete" je met en dur le critère num l'application fonctionne comme je le souhaite.
    Lorsque dans cette même requête je fait référence au num qui est dans un formulaire j'obtiens le message d'erreur : 'erreur d'exécution 3061, trop peu de paramètres 1 attendu" pourquoi ?

    Si je veux utiliser la clause where dans la sélection sql du recordset (sql = "Select * from [marequete] where num = " & mnum) j'obtiens l'erreur d'exécution 3071, cette expression présente une erreur de syntaxe ou est trop complexe pour être évaluée, par exemple une expression numérique peut contenir des éléments trop compliqués. Essayer de la simplifier en affectant des parties a des variables."

    Je ne vois pas ce qu'il y a de compliqué la dedans,

    Merci pour votre aide .

  2. #2
    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,

    Si ta requête est paramétrée, ouvre le recordset en passant par un objet QueryDef, auquel tu fournis la/les valeur(s) du/des paramètres.
    Voir ici : Comment utiliser en VBA une requête existante ?

    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut utilisation de querydef avec parametres
    merci, malheureusement je patine toujours, j'ai le message erreur d'exécution 3665, élément non trouvé dans cette collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     qdf.Parameters("[Num]") = mnum                            '<== si requête paramétrée
    Merci pour votre aide.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub pec_Exit(Cancel As Integer)
    'Déclarations obligatoires et préalables
    ' il est nécessaire de cocher la biblothèque dao
      Dim db As DAO.Database
      Dim qdf As DAO.QueryDef
      Dim rs1 As DAO.Recordset
    'Variables locales
      Dim mmontant As Double
      Dim Mesures As String
      Dim mnum As Double
      Dim sql As String
      'référence à la requête
        Set qdf = CurrentDb.QueryDefs("marequete")
      'valorisation du pacage
       mnum = Me!num
      'valorisation du sql
      'sql = "Select * from [marequete] where num =  " & mnum
      sql = "Select * from [marequete] "
     
      Set db = Application.CurrentDb
      qdf.Parameters("[Num]") = mnum                            '<== si requête paramétrée
      Set rs1 = db.OpenRecordset(sql)
      'mise a zéro du mmontant
      mmontant = 0
      DoCmd.Requery
    'Logiquement Access doit commencer par traiter le 1er enregistrement
    'Mais il est préférable de s'en assurer
      rs1.MoveFirst
      'Pour vérifier le fonctionnement de notre procédure
       'Ici, débute la boucle
      Do
    'On injecte le contenu du champ dans une variable
        mmontant = mmontant + rs1(4)
    'On passe à l'enregistrement suivant
       rs1.MoveNext
    'Et ceci jusqu'à la fin du recordset
      Loop Until rs1.EOF = True
    ' on ecrit le montant total ds la zone texte tot_montant
    Me!TOT_MONTANT = mmontant
     
    End Sub

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    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 137
    Par défaut
    Bonjour,

    Pour la bonne utilisation du Querydefs et ses propriétés c'est ici :

    http://warin.developpez.com/access/d...=partie_4#L4.7

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AC-2007] utilisation des recordSet = 1
    Par charlingals1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/01/2011, 13h48
  2. déclaration et utilisation des recordset
    Par Anastasia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 30/06/2010, 23h45
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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