【问题标题】:Access VBA Function doesn't return any value on queryAccess VBA 函数在查询中不返回任何值
【发布时间】:2017-03-31 16:12:10
【问题描述】:

我有以下 Access VBA 模块(它在我通过 Debug.Print 测试时根据需要返回信息),然后我在 SQL 代码中使用以下方式。

Public Function DayInterval(DueDate As String) As String
Dim Today As Date
Dim ConvertData As Date

Today = Date
ConvertDate = DateSerial(Year(DueDate), Month(DueDate), Day(DueDate))

Select Case DateDiff("d", ConvertDate, Today)
    Case 1 To 10
      DueDate = "0-10"
    Case 11 To 30
      DueDate = "11-30"
    Case 31 To 60
      DueDate = "31-60"
    Case 61 To 90
      DueDate = "61-90"
   Case 91 To 180
      DueDate = "91-180"
   Case 181 To 365
      DueDate = "181-365"
   Case 366 To 540
      DueDate = "366-540"
   Case 541 To 730
      DueDate = "541-730"
   Case Else
      DueDate = ">730"
End Select

DayInterval = DueDate 

End Function

SELECT 
DueDate AS [Date], 
DayInterval([DUE_DATE]) AS [Interval]
FROM Invoices;

问题是当我运行上述查询时,我没有得到任何结果。

任何关于为什么会发生这种情况的说明?

谢谢。

【问题讨论】:

  • IntervaloDias vs DayInterval... 这是在您的代码中还是只是提出问题的错误?
  • 一个错误。已经改正了。谢谢。

标签: sql ms-access vba


【解决方案1】:

您必须使用真实的日期值:

ConvertDate = DateSerial(Year(DateValue(DueDate)), Month(DateValue(DueDate)), Day(DateValue(DueDate)))

或者只是(见 Minty 的评论):

ConvertDate = DateValue(DueDate)

【讨论】:

  • DateValue(DueDate) 将返回相同本地区域设置中的日期,好奇为什么要使用日期序列?
  • 这是为了保持风格 - 我们可能只会看到一个 sn-p。但是你是对的,因为这里的 DateSerial 是多余的。
  • 两者都有效(感谢您的反馈),但我的问题是在 SQL 代码中运行该函数时没有得到任何结果,因为没有出现任何结果。
  • 已经解决了。我在函数末尾错过了这个:DayInterval = DueDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2013-12-04
  • 2020-12-05
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多