Может ли 1 Recordset выполнить 2 запроса на выбор одновременно? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть 2 функции, которые я использую в своей базе данных. Мне было интересно, могу ли я «объединить» эти два, чтобы «сократить» мой код.

Option Compare Database
Option Explicit

Dim strTaxR As String
Dim strYTDG As String

Public Function fncTRate(ByVal PEnd As Date) As Double

strTaxR = "SELECT TOP 1 [Tax Rate] As TRate FROM tblTax WHERE [Effective Date] <= #" & PEnd & "#" ORDER BY [Effective Date] DESC;"

    With CurrentDb.OpenRecordset(strTaxR)
        If Not (.BOF And .EOF) Then
            fncTRate = .Fields("TRate")
        End If
    End With

End Function

Public Function fncYTDG(EmpN As Integer, PEnd As Date) As Double

strYTDG = "SELECT Sum([SGROSS]) As YTDG FROM qryYTD2 WHERE [PE] Between #" & DateSerial(Year(PEnd ), 1, "1") & "# And #" & PEnd & "# And [EID]=" & EmpN

    With CurrentDb.OpenRecordset(strYTDG)
        If Not (.BOF And .EOF) Then
            fncYTDG = .Fields("YTDG")
        End If
    End With

End Function

Будет ли иметь значение сжатие или я должен оставить его как есть?

1 Ответ

0 голосов
/ 09 февраля 2020

Вы можете сделать это:

Public Function fncGrossRate( _
    ByVal GrossOrRate As Integer, _
    ByVal PEnd As Date, _
    Optional ByVal EmpN As Integer) _
    As Currency

    Dim SQL     As String
    Dim Result  As Currency

    Select Case GrossOrRate
        Case 0
            SQL = "SELECT TOP 1 [Tax Rate] As TRate FROM tblTax " & _
                "WHERE [Effective Date] <= #" & Format(PEnd, "yyyy\/mm\/dd") & "# ORDER BY [Effective Date] DESC;"
        Case 1
            SQL = "SELECT Sum([SGROSS]) As YTDG FROM qryYTD2 " & _
                "WHERE [PE] Between #" & Format(DateSerial(Year(PEnd), 1, 1), "yyyy\/mm\/dd") & "# And #" & Format(PEnd, "yyyy\/mm\/dd") & "# And [EID]=" & EmpN & ""
    End Select

    If SQL <> "" Then
        With CurrentDb.OpenRecordset(SQL)
            If Not (.BOF And .EOF) Then
                Result = .Fields(0).Value
            End If
        End With
    End If

    fncGrossRate = Result

End Function

Но, как уже сказано Июнь , прямой ответ на ваш вопрос: Нет .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...