Оператор SQL для публичной функции - PullRequest
0 голосов
/ 03 октября 2019

Добрый день, у меня есть запрос, который дает мне текущую ставку сотрудника на основе WorkDay, используя это:

(Select Top 1 T1.Rate FROM tblERates as T1 WHERE T1.EMPID = tblPayroll.EMPID And T1.EffectiveDate <= tblPayroll.WorkDay ORDER BY T1.EMPID asc, T1.EffectiveDate desc)

Теперь, когда проект растет, мне нужно иметь возможностьвернуть рейтинг сотрудника на разных формах / отчетах, поэтому я хочу преобразовать этот sql в публичную функцию.

Я пробовал это:


Public Function fncERate(EID As Integer, WD As Date) As Double

    Dim intERate As Double
    Dim intWD As String

    intWD = "#" & Format(WD, "m/d/yyyy") & "#"

    intERate = "SELECT TOP 1 Rate" _
                & "FROM tblERates" _
                & "WHERE EMPID = EID And EffectiveDate <= intWD" _
                & "ORDER BY EMPID asc;"
    fncERate = intERate

End Function

Но я получаю "ошибку несоответствия типов"

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Да, вам не хватает пробелов в вашем синтаксисе sql Небольшой совет для быстрого разработчика

Нажмите Ctrl + G , чтобы открыть панель выполнения во время отладки, и введите

? intERate

, чтобы напечатать значение вашей переменной, тогда вы можете просто скопировать вставить sql и попробовать его напрямую

0 голосов
/ 03 октября 2019

Немного повозившись, я придумал:

Public Function fncERate(EID As Integer, WD As Date) As Double


    Dim intERate As String
    Dim intWD As String
    Dim intEID As Integer


    intWD = "#" & Format(WD, "m/d/yyyy") & "#"

    intERate = "SELECT TOP 1 [Rate]" & _
                " FROM tblERates" & _
                " WHERE [EMPID] = " & EID & " And [EffectiveDate] <= " & intWD & " " & _
                " ORDER BY [EMPID] asc;"

    With CurrentDb.OpenRecordset(intERate)
        If Not (.BOF And .EOF) Then
            fncERate = .Fields(0)
        End If
    End With


End Function
...