2016-10-18 3 views
1

이 질문은 이전에 질문되었습니다. 나는이 주제에 대한 연구에서 내가 이해 한 것을 토대로 (아래) 코드를 수정했다. 그러나 아래 코드는 굵게 표시되어 있습니다.쿼리에 매개 변수 전달 Access VBA

사용자가 RstName 쿼리에 대한 시작 및 종료 날짜 조건을 입력 할 수있는 양식 (PBCIncSum)이 있습니다. 이 함수는 쿼리 RstName에있는 데이터의 95 백분위 수 값을 계산합니다. 코드를 실행할 때 런타임 오류 '3061 : 매개 변수가 너무 적습니다. 예상 2. 나는 뭘 잘못하고 있니? 어떤 해결책도없이이 코드를 3 일 동안 보냈다.

Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As Double) As Double 
'This function will calculate the percentile of a recordset. 
'The field must be a number value and the percentile has to 
'be between 0 and 1. 
If PercentileValue < 0 Or PercentileValue > 1 Then 
    MsgBox "Percentile must be between 0 and 1", vbOKOnly 
End If 
Dim PercentileTemp As Double 
Dim dbs As DAO.Database 
Set dbs = CurrentDb 
Dim xVal As Double 
Dim iRec As Long 
Dim i As Long 
Dim RstOrig As DAO.Recordset 
Dim qdf As DAO.QueryDef 
Dim prm As DAO.Parameter 

Set qdf = dbs.QueryDefs(RstName) 
qdf.Parameters(0) = Forms!PBCIncSum!StDate 
qdf.Parameters(1) = Forms!PBCIncSum!EndDate 

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

**Set RstOrig = CurrentDb.OpenRecordset(RstName, dbOpenDynaset)** 
RstOrig.Sort = fldName 
Dim RstSorted As DAO.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 
Set qdf = Nothing 
PercentileRst = PercentileTemp 

최종 기능 내가 잘못 뭐하는 거지

+0

내가 후속 질문이 있습니다. NULL이 아닌 값이나 ZERO가 아닌 값에 대한 백분위 수를 어떻게 계산합니까? –

답변

1

?

CurrentDb.OpenRecordset을 사용하여 쿼리를 실행하려고합니다. 당신은 QueryDef 개체 qdf를 생성하고 해당 매개 변수를 정의, 그래서 당신은 그 QueryDef 개체의 OpenRecordset 방법을 사용할 필요가있다 :

Set rstOrig = qdf.OpenRecordset 
+0

Gord, 빠른 답장을 보내 주셔서 감사합니다. 내가 제안한 것을 수행하면 다음 줄에 같은 오류가 발생합니다. 런타임 오류 '3001': 잘못된 인수입니다. Sunil. –

+0

다음 코드를 시도해 보았습니다! 당신의 도움을 주셔서 감사합니다!!! :-) –

+0

세트 rstOrig = qdf.OpenRecordset() –

관련 문제