Wywoływanie funkcji VBA w kwerendzie dostępu
Próbuję połączyć wyniki 8 różnych zapytań z powrotem w jedno zapytanie. Wszystkie zapytania, które mają być używane, to kwerendy zapytań o zapytania. 8 serii 4 zapytań rozdzieliło graczy w zależności od tego, ile rund golfa rozegrali. Ostatnie zapytanie w każdej serii oblicza dokładny HCP każdego gracza.
To, co próbuję zrobić, może nie być możliwe przy użyciu kodu, którego używam.
Kod funkcji jest następujący:
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
oraz SQL Query Statement:
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));
Gdy próbuję to uruchomić, pojawia się komunikat o błędzieUndefined function 'EHC' in expression
.
Próbowałem również tego samego zapytania z instrukcją IIF lub SWITCH zastępując wywołanie funkcji.
Z grubsza opieram pomysł wywołania funkcji z artykułu wKwerenda rankingowa MS Access 2010 porównująca dwie kolumny dla unikalnych szeregów.
Jakakolwiek pomoc byłaby bardzo mile widziana, ponieważ mam tylko ten problem do rozwiązania i mam nadzieję, że będę blisko zakończenia tego narzuconego koszmaru.