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

“条件表达式中的数据类型不匹配。”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中进行查询,但是它一直给我这个错误“条件表达式中的数据类型不匹配”。 查询很简单 难怪为什么? 问题答案:

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

  • 问题内容: 我试图做一个有条件的正则表达式,我知道堆栈溢出还有其他帖子,但是对这个问题太具体了。 如何创建仅在特定条件下才能匹配的正则表达式? 一个例子 例如,如果我们有一个字符串列表( 在java中 ): 并且我们只想匹配字符串末尾与开头相同数量的 在这个例子中我们想要什么 在此示例中,我们需要一个正则表达式来检查结尾处是否有与开始时相同数量的正则表达式。 条件部分 :如果开头有,则检查结尾是否