【问题标题】:Can 1 Recordset execute 2 Select queries at the same time?1个记录集可以同时执行2个选择查询吗?
【发布时间】:2020-03-03 19:09:01
【问题描述】:

我在整个数据库中使用了 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

压缩它会产生影响还是应该保持原样?

【问题讨论】:

  • 如图所示,函数不能被合并,因为每个函数都会返回一个值到它被调用的地方。
  • 关于问题标题 - 记录集基于一个 SELECT 查询并且只有一个。所以基本上答案是否定的。
  • 拥有独立的功能才是正确的选择!不要复杂化:)
  • 非常感谢大家的建议。

标签: vba ms-access


【解决方案1】:

你可以这样做:

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

但是,正如 June 所述,您的问题的直接答案是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2012-06-20
    • 2018-08-06
    相关资源
    最近更新 更多