En espérant que quelqu'un puisse vous aider. J'ai lu et n'arrive pas à trouver une solution. Problème: J'ai un formulaire (frm_input) dans lequel un utilisateur entre une plage de population. Une fois que l'utilisateur entre les min et max de la plage et clique sur le bouton 'ok', les valeurs sont entrées dans une requête (qryMasterQuery) et la requête est exécutée sur ces entrées en utilisant une instruction 'Between' référençant les champs du formulaire .OpenRecordSet trop peu de pararmeters 4/problèmes avec QueryDefs
Le bouton 'OK' ouvre également une autre forme 'frm_output'. Ce formulaire exécute une fonction 'percentile' qui calcule les centiles de données dans la requête. La fonction passe trois paramètres - le nom de la requête, le champ dans la requête sur lequel calculer le percentile et le percentile à calculer.
La fonction et le formulaire s'exécutent correctement lorsque j'omets les instructions "between" de la requête. Quand j'ai essayé de lier tout cela ensemble, j'ai reçu un 'trop peu de paramètres, 4' sur ma fonction OpenRecordset(). D'après ce que j'ai lu, je dois déclarer explicitement l'objet DAO.Querydef et fournir les paramètres via la collection de paramètres d'objets Querydef.
Numéro 1: Quand j'inclus l'instruction:
Set qdf = db.QueryDefs("qryMasterQuery")
je reçois un moteur d'exécution 424 message d'erreur.
Much Bigger Problème 2: Je ne suis toujours pas clair sur la syntaxe pour fournir des paramètres via qdf.Paramaters. Je ne veux pas tout déclarer dans la requête, seulement ce qui est passé à la fonction, c'est-à-dire le 'fldName'.
mon code est ci-dessous:
Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As Double) As Double
'This function will calculate the percentile of a recordset.
Dim PercentileTemp As Double
Dim dbs As DAO.database
Dim RstOrig As DAO.Recordset
Set dbs = CurrentDb
Dim xVal As Double
Dim iRec As Long
Dim i As Long
Set RstOrig = CurrentDb.OpenRecordset("qryMasterFee", dbOpenDynaset)
RstOrig.Sort = fldName
Dim RstSorted As Recordset
Set RstSorted = RstOrig.OpenRecordset()
RstSorted.MoveLast
RstSorted.MoveFirst
xVal = ((RstSorted.RecordCount - 1) * PercentileValue) + 1
'x now contains the record number we are looking for.
'Note x may not be whole number
iRec = Int(xVal)
xVal = xVal - iRec
'i now contains first record to look at and
'x contains diff to next record
RstSorted.Move iRec - 1
PercentileTemp = RstSorted(fldName)
If xVal > 0 Then
RstSorted.MoveNext
PercentileTemp = ((RstSorted(fldName) - PercentileTemp) * xVal) + PercentileTemp
End If
RstSorted.Close
RstOrig.Close
Set RstSorted = Nothing
Set RstOrig = Nothing
Set dbs = Nothing
PercentileRst = PercentileTemp
End Function
Je suis éternellement reconnaissant pour toute aide que je suis à peu près fait me cogner la tête sur le mur.
merci! passer à travers et fournir les paramètres a résolu le problème. le seul autre changement que je devais faire était de déclarer explicitement les paramètres (plutôt que de les référencer à partir du formulaire). – jimmyv41
Vous pouvez référencer des objets de formulaire, comme des zones de texte, en tant que paramètres si la requête est ouverte en tant que jeu d'enregistrements sur le module de ce formulaire. Aussi s'il vous plaît choisir ma réponse si elle a répondu à votre question. Merci :) – usncahill