访问中查询设计功能的奇怪问题

时间:2015-09-02 15:16:07

标签: sql ms-access ms-access-2010

我收到错误消息"标准表达式中的数据类型不匹配"在我正在使用查询构建器进行访问的查询中。问题是由查询中的函数引起的。

这是功能:

Function Sudent_Selected_Next_Active_Season(Code_Student, Starting_Date As Date, Code_Project) As Boolean

    Dim MyReturn
    Dim SQLDate
    SQLDate = Format$(Starting_Date, "\#mm\/dd\/yyyy\#")

    MyReturn = DCount("[code_student]", "Project_Termination_level_2", "[Code_Student]=" & Code_Student & " and [ending] > " & SQLDate & " and [code_project] <>" & Code_Project)

    If IsNull(MyReturn) Then
        MyReturn = 0
    End If

    If MyReturn > 0 Then
        Sudent_Selected_Next_Active_Season = True
    Else
        Sudent_Selected_Next_Active_Season = False
    End If

End Function

我尝试了标准0,-1,&#34; 0&#34;,&#34; -1&#34;,True,False,它们都给出了同样的错误。

如果我删除标准并查看数据,则所有行都由-1和0

组成

这是使用的SQL。

SELECT Sudent_Selected_Next_Active_Season([t_student].[code_student],[T_Project].[starting_date],[T_project].[code_project]) AS ActiveNextSeason
FROM (T_Project INNER JOIN T_Project_Student ON T_Project.Code_Project = T_Project_Student.Code_Project) INNER JOIN T_Student ON T_Project_Student.Code_Student = T_Student.Code_Student
WHERE (((Sudent_Selected_Next_Active_Season([t_student].[code_student],[T_Project].[starting_date],[T_project].[code_project]))=-1)) OR (((Sudent_Selected_Next_Active_Season([t_student].[code_student],[T_Project].[starting_date],[T_project].[code_project]))=-1));

如果有人能让我知道在哪里寻找解决方案,我会很感激。如果有人想了解更多信息,请询问。

1 个答案:

答案 0 :(得分:0)

不确定为什么在WHERE子句中有两次相同的条件,但通常,对于这些错误,您需要在一侧转换数据类型以匹配另一侧。 您可以将函数的返回值更改为integer,将boolean返回值转换为integer,或将-1转换为boolean

如果您已将函数的返回值更改为整数,则与-1的比较不应该为您提供数据类型转换错误。试试这个:

SELECT  
    s.code_student,p.starting_date,p.code_project,
    Sudent_Selected_Next_Active_Season(s.code_student,p.starting_date,p.code_project) AS ActiveNextSeason
FROM 
    T_Project p INNER JOIN 
    T_Project_Student ps    ON 
    p.Code_Project = ps.Code_Project INNER JOIN 
    T_Student s ON 
    ps.Code_Student = s.Code_Student
WHERE
 Sudent_Selected_Next_Active_Season(s.code_student,p.starting_date,p.code_project)=-1