Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2011, 17h32   #1
Invité de passage
 
Inscription : mars 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 14
Points : 4
Points : 4
Par défaut utilisation des recordset

J'ai un souci avec l'utilisation des recordset
voici mon code :
Code :
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 .
bernez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 18h32   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
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 : 3 939
Points : 6 278
Points : 6 278
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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 11h21   #3
Invité de passage
 
Inscription : mars 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 14
Points : 4
Points : 4
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 :
 qdf.Parameters("[Num]") = mnum                            '<== si requête paramétrée
Merci pour votre aide.

Code :
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
bernez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 14h36   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
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,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h48.


 
 
 
 
Partenaires

Hébergement Web