【问题标题】:Strange issue with query design function in access访问中查询设计功能的奇怪问题
【发布时间】:2015-09-03 03:09:04
【问题描述】:

我在访问中使用查询生成器进行的查询中出现错误消息“条件表达式中的数据类型不匹配”。问题是由查询中的函数引起的。

这是函数:

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、“0”、“-1”、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));

如果有人能告诉我在哪里可以找到解决方案,我将不胜感激。如果有人想了解更多信息,请尽管询问。

【问题讨论】:

  • 为什么Code_StudentCode_Project在函数调用签名中没有as DataType
  • 您还应该在使用该函数的地方添加查询 SQL。
  • @Juan Carlos Oropeza 我做了更改,但没有修复。
  • 如果您在函数中指定Code_StudentCode_Project 的数据类型,您将真正帮助您自己(下次阅读该函数时)和我们。它们是数字吗?
  • 这些是整数,是它们各自表的 ID。

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


【解决方案1】:

不知道为什么您的 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

【讨论】:

  • 我有两次,因为这是简化的查询,我删除了除问题之外的所有内容。该函数的值类型为 boolean alrealdy。
  • 对,这就是问题所在。您正在将布尔值与整数进行比较。尝试将返回类型更改为整数。
  • 我已将 MyReturn 和 Sudent_Selected_Next_Active_Season 更改为整数类型,但问题仍然相同
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多