8 개의 다른 쿼리 결과를 하나의 쿼리로 다시 결합하려고합니다. 사용되는 모든 쿼리는 쿼리 쿼리 쿼리에 대한 쿼리입니다. 8 시리즈의 4 가지 쿼리는 그들이 플레이 한 골프 라운드 수에 따라 플레이어를 나눕니다. 각 시리즈의 마지막 쿼리는 각 플레이어의 정확한 핸디캡을 계산합니다.액세스 쿼리에서 VBA 함수 호출
내가하고있는 일은 내가 사용하고있는 코드로는 불가능할 수도 있습니다.
함수 코드는 다음과 같습니다
Function EHC(PlayerID As Long) As Long
Dim queT20 As Recordset
Dim que3to6 As Recordset
Dim que7or8 As Recordset
Dim que9or10 As Recordset
Dim que11or12 As Recordset
Dim que13or14 As Recordset
Dim que15or16 As Recordset
Dim que17or18 As Recordset
Dim que19or20 As Recordset
Set queT20 = CurrentDb.OpenRecordset("Top20Count")
queT20.FindFirst ("PlayerID =" & PlayerID)
If queT20![PlayerID] >= 19 Then
Set que19or20 = CurrentDb.OpenRecordset("P_19or20ExactHC")
que19or20.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que19or20.Exact_HC
que19or20.Close
Set que19or20 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que17or18 = CurrentDb.OpenRecordset("P_17or18ExactHC")
que17or18.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que17or18.Exact_HC
que17or18.Close
Set que17or18 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que15or16 = CurrentDb.OpenRecordset("P_15or16ExactHC")
que15or16.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que15or16.Exact_HC
que15or16.Close
Set que15or16 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que13or14 = CurrentDb.OpenRecordset("P_13or14ExactHC")
que13or14.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que13or14.Exact_HC
que13or14.Close
Set que13or14 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que11or12 = CurrentDb.OpenRecordset("P_11or12ExactHC")
que11or12.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que11or12.Exact_HC
que11or12.Close
Set que11or12 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que9or10 = CurrentDb.OpenRecordset("P_9or10ExactHC")
que9or10.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que9or10.Exact_HC
que9or10.Close
Set que9or10 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que7or8 = CurrentDb.OpenRecordset("P_7or8ExactHC")
que7or8.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que7or8.Exact_HC
que7or8.Close
Set que7or8 = Nothing
ElseIf queT20![PlayerID] >= 17 Then
Set que3to6 = CurrentDb.OpenRecordset("P_3to6ExactHC")
que3to6.FindFirst ("PlayerID =" & PlayerID)
ExactHC = que3to6.Exact_HC
que3to6.Close
Set que3to6 = Nothing
Else: ExactHC = 0
End If
queT20.Close
Set queT20 = Nothing
End Function
을하고 SQL 쿼리 문 :이 실행하려고하면
SELECT PlayerInfo.PlayerID, PlayerInfo.Display, EHC([PlayerInfo]![PlayerID]) AS ExactHandicap
FROM ((((((((PlayerInfo INNER JOIN Top20Count ON PlayerInfo.PlayerID = Top20Count.PlayerID)
INNER JOIN P_3to6ExactHC ON PlayerInfo.PlayerID = P_3to6ExactHC.PlayerID)
INNER JOIN P_7or8ExactHC ON PlayerInfo.PlayerID = P_7or8ExactHC.PlayerID)
INNER JOIN P_9or10ExactHC ON PlayerInfo.PlayerID = P_9or10ExactHC.PlayerID)
INNER JOIN P_11or12ExactHC ON PlayerInfo.PlayerID = P_11or12ExactHC.PlayerID)
INNER JOIN P_13or14ExactHC ON PlayerInfo.PlayerID = P_13or14ExactHC.PlayerID)
INNER JOIN P_15or16ExactHC ON PlayerInfo.PlayerID = P_15or16ExactHC.PlayerID)
INNER JOIN P_17or18ExactHC ON PlayerInfo.PlayerID = P_17or18ExactHC.PlayerID)
INNER JOIN P_19or20ExactHC ON PlayerInfo.PlayerID = P_19or20ExactHC.PlayerID
WHERE (((PlayerInfo.Display)=True));
내가 Undefined function 'EHC' in expression
의 오류 메시지가 표시됩니다.
또한 함수 호출 대신 IIF 또는 SWITCH 문을 사용하여 동일한 쿼리를 시도했습니다.
나는 대략 MS Access 2010 Ranking Query comparing two columns for unique ranks에있는 기사에서 함수 호출에 대한 아이디어를 기반으로합니다.
내가이 문제를 해결하기 만하면 도움이 될 것입니다. 나는이 자체 부과 된 악몽을 마무리 짓기를 희망합니다.
감사합니다. 'ExactHC = que19or20.Exact_HC' 줄에 '컴파일 오류 : 메소드 또는 데이터 멤버가 없습니다'라는 메시지가 나타납니다. 변수 'ExactHC'에 대한 dim 문을 추가했습니다. 내가 지적한 다른 것들을 고칠 때 하나도 존재하지 않는다는 것을 깨달았습니다. 이보고 된 쿼리에 대한 SQL 문은 P_19or20RforHC.PlayerID 에 의해 P_19or20RforHC 그룹에서 Exact_HC AS P_19or20RforHC.PlayerID, AS 평균 (P_19or20RforHC.PlayedTo) [평균], 라운드 ([평균] * 0.93,1)를 선택'이다 ORDER BY P_19or20RforHC.PlayerID;'. 어떤 아이디어? – Teamgilla
나는 코드에 무엇이 잘못되었는지 정렬하고 조인에 대해 정확하다고 생각했습니다. 코드는'ExactHC = que19or20! [Exact_HC]'이어야합니다. 하지만 여전히 '정의되지 않은 함수'오류가 발생합니다. 이 과정을 진행하면서 나는 다른 코드를 생각해 냈지만 동일한 원리에 기초하여 계산을 처음부터 다시 할 수 있었지만 몇 초 후에 다시 재개하고 멈추지 않을 것입니다. 이 질문을 다른 질문으로 게시 할 수 있습니다. – Teamgilla