当前位置: 首页 > 知识库问答 >
问题:

“条件表达式中的数据类型不匹配。”ms access出错,我完成了所有建议的故障排除

上官和惬
2023-03-14

我得到错误“条件表达式中的数据类型不匹配”在查询中。

像这样查询工作完美

WorkingDays([ORDER_NOTIFICATION_DATE],[OP_DISTRIBUTION_DATE]) AS
BOOKING_DAYS, IIf([BOOKING_DAYS]>8,"IS LATE","ON TIME") AS BOOKING_DELAYED
FROM JOB INNER JOIN [ORDER] ON JOB.[JOB_ID] = ORDER.[JOB_ID]
WHERE (((ORDER.ORDER_NOTIFICATION_DATE) Is Not Null) AND
((ORDER.OP_DISTRIBUTION_DATE) Is Not Null));

当我尝试输入另一个标准时,它会显示错误:

WorkingDays([ORDER.ORDER_NOTIFICATION_DATE],[ORDER.OP_DISTRIBUTION_DATE]) AS 
BOOKING_DAYS, IIf([BOOKING_DAYS]>8,"IS LATE","ON TIME") AS BOOKING_DELAYED
FROM JOB INNER JOIN [ORDER] ON JOB.[JOB_ID] = ORDER.[JOB_ID]
WHERE (((ORDER.ORDER_NOTIFICATION_DATE) Is Not Null) AND 
((ORDER.OP_DISTRIBUTION_DATE) Is Not Null) AND
((WorkingDays([ORDER.ORDER_NOTIFICATION_DATE],
[ORDER.OP_DISTRIBUTION_DATE]))>8));

WorkingDays返回一个整数,我尝试了其他帖子中提出的大多数解决方案。

这是工作日:

Public Function WorkingDays(StartDate As Date, EndDate As Date) As Integer
'....................................................................
' Name:     WorkingDays
' Inputs:   StartDate As Date
'   EndDate As Date
' Returns: Integer
' Author: Arvin Meyer
' Date:     February 19, 1997
' Comment: Accepts two dates and returns the number of weekdays between them
' Note that this function does not account for holidays.
'....................................................................
On Error GoTo Err_WorkingDays

Dim intCount As Integer



intCount = 0
Do While StartDate <= EndDate
'Make the above < and not <= to not count the EndDate

Select Case Weekday(StartDate)
Case Is = 1, 7
intCount = intCount
Case Is = 2, 3, 4, 5, 6
intCount = intCount + 1
End Select
StartDate = StartDate + 1  
Loop
WorkingDays = intCount

Exit_WorkingDays:
Exit Function

Err_WorkingDays:
Select Case Err

Case Else
MsgBox Err.Description
Resume Exit_WorkingDays
End Select

End Function

共有1个答案

窦志新
2023-03-14

我看到您使用的是Is Not Null和一个不能在同一个查询中处理空值的函数。

虽然您可能认为这可以很好地工作,但当空值被过滤掉时,它们仍然会被传递到此函数并创建错误。

使用Nz对传递给函数的空值进行转义:

WorkingDays(Nz([ORDER.ORDER_NOTIFICATION_DATE], 0),Nz([ORDER.OP_DISTRIBUTION_DATE], 0)) AS 
BOOKING_DAYS, IIf([BOOKING_DAYS]>8,"IS LATE","ON TIME") AS BOOKING_DELAYED
FROM JOB INNER JOIN [ORDER] ON JOB.[JOB_ID] = ORDER.[JOB_ID]
WHERE (((ORDER.ORDER_NOTIFICATION_DATE) Is Not Null) AND 
((ORDER.OP_DISTRIBUTION_DATE) Is Not Null) AND
((WorkingDays(Nz([ORDER.ORDER_NOTIFICATION_DATE], 0),
Nz([ORDER.OP_DISTRIBUTION_DATE], 0)))>8));
 类似资料:
  • 每当这段代码运行时,我就会得到上面的错误。代码应该将一条记录插入一个表中,然后从另一个表中删除记录。 编辑:我想问题出在“插入”部分。除最后一列外,所有列都是短文本,ItemPrice是一种货币。我也在使用Access

  • 问题内容: 我正在尝试使用两个实时CSV对访问进行查询,该CSV具有一个具有不同数据类型(数字和短文本)的公共字段。我发现您可以使用’CStr’联接不同的数据类型。我已经在sql视图的代码中添加了“ CStr”。请找到下面的代码。 这给了我想要访问的输出,当我单击“数据表视图”时,现在可以看到输出。但是,当我尝试将数据导出(我实际上是在尝试创建导出规范,以便可以使用宏导出csv)作为csv时,会收

  • 我在Sybase数据库中有一个表,其中有一列is_req。它的数据类型是char(1)。它在我的hbm文件中的属性定义如下: 属性名称="is必需"列="is_req"类型="boolean" 现在,当我尝试使用标准/限制进行比较时,比如:,我得到以下例外: 如果我尝试做,我得到以下异常: com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型'VARCHAR

  • 问题内容: 我正在尝试在Access 2010中进行查询,但是它一直给我这个错误“条件表达式中的数据类型不匹配”。 查询很简单 难怪为什么? 问题答案:

  • 问题内容: 我可以用来匹配所有标点符号(包括下划线)。 我想严格 排除 一个单词内的所有撇号。为此,我正在使用 但是,我不能让它们一起工作以匹配所有标点符号,但严格来说单词内的撇号除外。 我应该使用什么? 例子: 这应该不匹配。 这应该匹配。 这些应该匹配。 问题答案: 您可以在此处组合三个条件。 匹配除撇号外的所有标点符号使用 匹配所有撇号,后面没有字母。 匹配所有不带字母的撇号。 正则表达式:

  • 问题内容: 我有一个行为异常的应用程序,似乎在泄漏。经过简要的探查器调查后,大多数内存(80%)由实例保留。我怀疑终结器无法运行。 造成这种情况的常见原因似乎是终结器抛出异常。但是,该类方法的javadoc (例如参见此处)似乎自相矛盾:它指出 如果finalize方法抛出未捕获的异常,则该异常将被忽略,并且该对象的终止将终止。 但后来,它也指出 由finalize方法引发的任何异常都会导致该对象