MS Access使用SQL函数

时间:2018-01-05 12:42:32

标签: sql sql-server ms-access

下午好,

我非常沮丧,因为我在视觉上知道我想要什么,但我无法在MS Access中使用它。我在SQL服务器中有一个功能,我需要在MS Access中使用它。我尝试翻译它,但它没有成功。最终发现你需要一个空白表格,添加一个文本框但现在真正的斗争;我需要一个按钮。

    CREATE FUNCTION fnFietsAantDagenPerJaar
        (
            @Jaar AS int

        )
    RETURNS TABLE
    AS
    RETURN

    SELECT f.Fiets_id, f.Fiets_Type, SUM(DATEDIFF(DAY, h.Huurovereenkomst_Begin_datum, h.Huurovereenkomst_Eind_datum)) AantalDagen
    FROM Fiets f
        INNER JOIN HuurovereenkomstFiets hf
        ON hf.HuurovereenkomstFiets_Fiets_id = f.Fiets_id
        INNER JOIN Huurovereenkomst h
        ON h.Huurovereenkomst_id = hf.HuurovereenkomstFiets_Huurovereenkomst_id
    WHERE YEAR(h.Huurovereenkomst_Begin_datum) = @Jaar AND YEAR(h.Huurovereenkomst_Eind_datum) = @Jaar
    GROUP BY f.Fiets_id, f.Fiets_Type

    GO

这是我的SQL函数,有效。 现在我想要一个简单的MS Access表单:

   <Year>   [Enter]

如果年份是文本框,并且输入按钮应该执行年份的功能是可变的。 任何可以让我离开的人?

1 个答案:

答案 0 :(得分:1)

尝试:

PARAMETERS Jaar Integer;
SELECT 
    f.Fiets_id, 
    f.Fiets_Type, 
    SUM(DateDiff("d", h.Huurovereenkomst_Begin_datum, h.Huurovereenkomst_Eind_datum)) AS AantalDagen
FROM 
    Fiets AS f
INNER JOIN HuurovereenkomstFiets AS hf
    ON hf.HuurovereenkomstFiets_Fiets_id = f.Fiets_id
    INNER JOIN Huurovereenkomst AS h
        ON h.Huurovereenkomst_id = hf.HuurovereenkomstFiets_Huurovereenkomst_id
WHERE 
    Year(h.Huurovereenkomst_Begin_datum) = [Jaar] AND 
    Year(h.Huurovereenkomst_Eind_datum) = [Jaar]
GROUP BY 
    f.Fiets_id, 
    f.Fiets_Type

这可能很慢,因为Access必须执行全表扫描。如果是这样,请考虑使用原始SQL创建传递查询。这将发送到SQL Server并在那里处理,只返回结果。