【问题标题】:Access VBA recordCount returning 0 when records exist当记录存在时访问 VBA 记录计数返回 0
【发布时间】:2017-08-09 02:47:53
【问题描述】:

我正在尝试创建一个将 n 个工作日添加到日期的函数。这显然需要考虑到周末和节假日。周末部分工作正常,但我使用了一个表格来列出所有的假期,我无法让我的查询来提取准确的记录计数。它坚持计数始终为零。这是我的代码:

Public Function dateAddNoWeekends(dt1 As Date, genDate As Integer)
Dim i As Integer
Dim date1 As Date
Dim date2 As Date
Dim holidays As Boolean
Dim isWeekday As Boolean
Dim dayOfWeek As Integer
Dim numDays As Integer
Dim db As Database
Dim rs As DAO.Recordset
Dim sql As String
Set db = CurrentDb
date1 = dt1
date2 = date1
i = 0
numDays = genDate

sql = "SELECT * FROM Holidays WHERE holidayDate = " & date2
Set rs = db.OpenRecordset(sql)

Debug.Print date2

Do While i < numDays
    If Not isWeekday Then date2 = date2 + 1
    dayOfWeek = Weekday(date2)

    If rs.RecordCount > 0 Then
        Debug.Print rs.RecordCount
        holidays = True
    Else
        holidays = False
        Debug.Print rs.RecordCount
    End If

    If dayOfWeek > 1 And dayOfWeek < 7 And holidays = False Then
        If i < numDays - 1 Then date2 = (date2 + 1)
            isWeekday = True
            i = i + 1
        Else: isWeekday = False
        End If
Loop

rs.Close
Debug.Print date2

【问题讨论】:

  • 日期格式可能有问题?尝试使用像“2017-12-25”这样的固定日期进行测试。
  • 这样吗? sql = "SELECT * FROM Holidays WHERE holidayDate = '7/1/2017'" 这会产生数据类型不匹配。
  • Set rs = db.OpenRecordset(sql) 之后添加rs.MoveLast。也可能是"SELECT * FROM Holidays WHERE holidayDate = " &amp; CLNG(date2)。我讨厌 Access 中的日期。 :)
  • 尝试了所有这些方法,但它似乎不起作用:/ 使用 rs.MoveLast 给我一个运行时错误,显示“没有当前记录”。
  • 如果你不需要记录集中的任何字段,可以使用 DCount() 代替。

标签: ms-access vba


【解决方案1】:

为了解决这个问题,我在循环顶部声明了一个变量(以便它每次都能正确更新)并分配一个 Dcount 函数从 date2 计数到 date2。

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 2017-02-20
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多