Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

Requêtes: Too few parameters, expected n

Author(s)
Dev Ashish

Too few parameters, expected n

(Q)    Quand vous essayez d'exécuter une requête, depuis votre code, qui possède une clause WHERE, vous obtenez l'erreur "Too Few Parameters. Expected 1."   Qu'est-ce qui se passe??

(A)    Votre clause WHERE contient probablement une référence à un contrôle sur un formulaire.  Par exemple:

    strSQL="Select * from tblPeople where PeopleID= forms!SomeForm!PeopleID"

    Vous devez vous rappeler que Jet ne connaît rien au sujet des formulaires. Ici, il essaie d'évaluer forms!SomeForm!PeopleID comme un paramètre, au lieu de consulter le contrôle auquel l'expression réfère. Vous obtenez alors l'erreur annoncée.

    La meilleure façon est de concaténer la valeur retournée par le contrôle. (Note:  si vous n'êtes pas certain de la manipulation requise pour des dates et de chaînes, voir l'article Use Variables in SQL behind forms)

    strSQL="Select * from People where PeopleID=" & forms!SomeForm!PeopleID

 

De Andy Baron:

Quand vous utilisez une requête paramétrée en Access, depuis l'interface utilisateur, Access vous offre un service qui évalue plusieurs paramètres. Par exemple, la référence à un contrôle d'un formulaire ouvert est effectuée automatiquement. Ce service n'est cependant plus disponible lorsque vous utilisez le code VBA pour exécuter une requête paramétrée.

Votre code doit fournir le nombre exact de paramètres, en passant par l'objet  QueryDef. Le QueryDef de votre requête possède une collection  Parameters contenant un  Parameter par paramètre, fournissant un Nom (name), une valeur (value) et un index en indiquant le "rang" dans la collection. Ces objets peuvent être utilisés pour spécifier les valeurs attendues.

Set db = CurrentDb
Set qdf = db.QueryDefs("MyQuery")

'plus d'un syntaxe est possible
qdf(0) = Me!MyControl
qdf.Parameters(1) = 123
qdf![forms!frmParameters!txtNewDate] = #2/2/98#

Set rst = qdf.OpenRecordset(dbOpenSnapshot)
'ou qdf.Execute dbFailOnError

Quand une requête paramétrée d'Access ne contient que de références à des contrôles de formulaires ouverts, on peut alors simuler le service offert par Access, en interface utilisateur, comme suit:

Set db = CurrentDb
Set qdf = db.QueryDefs("MyQuery")

For Each prm In qdf.Parameters
        prm.Value = Eval(prm.Name)
Next prm

Set rs = qdf.OpenRecordset(dbOpenDynaset)
' ou qdf.Execute dbFailOnError

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer