Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 05/01/2011, 14h33   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 58
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 58
Points : 10
Points : 10
Par défaut problème avec paramètres d'une requête

Bonjour à tous,

j'ai une requête assez compliquée avec un tas de paramètres (25) et je l'utilise pour remplir une table Access.
Le problème c est que j'ai envie d'envoyer que certains paramètres à la requête, les paramètres restants étant des réels que je veux laisser égaux à 0. J ai alors le message :
Trop peu de paramètres. 25 attendus

comment puis je finter cela ?

Merci d'avance et bonne année à tous.
zskiredj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 15h21   #2
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 58
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 58
Points : 10
Points : 10
pour info, le code pour utiliser une requête avec parametres est le suivant :

Code :
1
2
3
4
5
6
7
8
Dim qdf As QueryDef 'requete
Set qdf = CurrentDb.QueryDefs("maRequete")
With qdf
    .Parameters("Parametre1") = valeur1
    .Parameters("Parametre2") = valeur2
   etc...
    .Execute
End With
Mon soucis est que dans la zone de Parameters, je n'envoie pas tous les paramètres à la requête. D'où le message d'erreur.

Comment faire pour lui dire que les paramètres non passés doivent être ignorés ?
zskiredj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h12   #3
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Au lieu d'utiliser directement la QueryDef, tu pourrais peut-être créer une classe qui t'initialise tous les paramètres à 0, et qui te fournisse une propriété pour définir uniquement les paramètres qui t'intéressent... non ?
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h32   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 58
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 58
Points : 10
Points : 10
si je créé la classe, je ne vois pas après comment j'appelle ma requête avec que les paramètres qui m'intéressent.
zskiredj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 18h41   #5
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Eh bien, disons que si tu créais une classe qui ressemble à quelque chose comme :
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
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit
 
Public Parametres As Collection
Public Query As DAO.querydef
 
Public Function Executer() As Recordset
    'là, tu as la requete (Query)
    'Tu as aussi toutes les valeurs de tous les paramètres
    'Tu peux donc exécuter la requête
    'et renvoyer le recordset
End Function
 
Public Property Get Parametre(a_vIndex As Variant) As String
    Parametre = Parametres.Item(a_vIndex)
End Property
 
Public Property Let Parametre(a_vIndex As Variant, a_sNewVal As String)
    Parametres.Item(a_vIndex) = a_sNewVal
End Property
 
Private Sub Class_Initialize()
    Set Parametres = New Collection
    'Création des 25 paramètres initialisés à 0
    Parametres.Add 0, "NomParam1"
    Parametres.Add 0, "NomParam2"
    Parametres.Add 0, "NomParam3"
    Parametres.Add 0, "NomParam4"
    Parametres.Add 0, "NomParam5"
    Parametres.Add 0, "NomParam6"
    Parametres.Add 0, "NomParam7"
    Parametres.Add 0, "NomParam8"
    Parametres.Add 0, "NomParam9"
    Parametres.Add 0, "NomParam10"
    Parametres.Add 0, "NomParam11"
    Parametres.Add 0, "NomParam12"
    Parametres.Add 0, "NomParam13"
    Parametres.Add 0, "NomParam14"
    Parametres.Add 0, "NomParam15"
    Parametres.Add 0, "NomParam16"
    Parametres.Add 0, "NomParam17"
    Parametres.Add 0, "NomParam18"
    Parametres.Add 0, "NomParam19"
    Parametres.Add 0, "NomParam20"
    Parametres.Add 0, "NomParam21"
    Parametres.Add 0, "NomParam22"
    Parametres.Add 0, "NomParam23"
    Parametres.Add 0, "NomParam24"
    Parametres.Add 0, "NomParam25"
End Sub
 
Private Sub Class_Terminate()
    Set Parametres = Nothing
End Sub
Tu pourrais alors utiliser la classe plutôt que le querydef ainsi
Code :
1
2
3
4
5
6
7
8
Sub test()
    Dim o As Classe1
    Set o = New Classe1
    Set o.Query = currentdb.QueryDefs("NomRequête")
    o.Parametre(1) = "test"
    o.Parametre("NomParam8") = "Autre"
    o.Executer
End Sub
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 11h00   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 58
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 58
Points : 10
Points : 10
très astucieux comme solution !
finalement j'ai opté pour une solution moins élégante mais plus simple à mettre en oeuvre : je créé un tableau et je mets dedans les parametres non nuls. Apres j en deduit les parametres nuls que je rajoute juste avant le .Execute.

En tous cas, merci pour ton aide !
zskiredj est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h42.


 
 
 
 
Partenaires

Hébergement Web