【问题标题】:How do i looping through my recordset using an array?如何使用数组遍历我的记录集?
【发布时间】:2013-09-28 21:08:49
【问题描述】:

我希望我的函数打开表,并为记录计数 1 返回 1/1/2013,为记录计数 2 返回 1/2/2013 ... 对于记录计数 20 返回 1/20/2013。

到目前为止,我有以下代码,但它只返回 1/2/2013 并且我有 24 条记录: (我的记录数每个月会在 22 -30 之间变化)

Public Function DDate() As Date

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim icounter As Integer
Dim UpBound As Long


Set db = CurrentDb()
Set rs = db.OpenRecordset("tblDDate", dbOpenDynaset)


    If Not (rst.BOF And rst.EOF) Then
        rst.MoveFirst

        UpBound = rs.RecordCount

    Do Until rs.EOF = True

        For icounter = 1 To UpBound
            DDate = DateAdd("m", icounter, "1/1/2013")
            rst.MoveNext
        Next icounter
    Loop
    End If

rs.Close
db.Close

 End Function

【问题讨论】:

  • 你的表结构是什么样的?您是要遍历字段还是只想遍历行?您是否在 tblDDate 中有一个可以使用 GROUP BY 语句进行分组的日期字段?
  • 我的表格不包含日期,我正在尝试向该表格添加日期字段。我想遍历行。字段计数将始终相同。所以如果记录/行 1 日期 = 1/1/2013 如果记录/行 2 日期 = 1/2/2013。我没有执行 30 if 语句,而是尝试遍历记录集。谢谢
  • 你的回复对我来说没有意义。如果您没有任何日期字段,您怎么知道 Record1 的日期是 2013 年 1 月 1 日?
  • 我可能没有正确执行此操作,我可能必须按照 John 的建议在查询中返回执行此操作。我想做的是创建一个新领域。一旦该字段在那里,循环遍历表,然后为每个记录添加 1 到该月的第一天。该表中有几个其他字段,包括一个 ID 字段。在我尝试在函数中执行此操作之前,我所拥有的是一个带有很长等式的生成表查询,该等式并不总是有效,因为每个月的记录数都在变化。
  • 在我的生成表查询中,DDate: iif(ID = 1, 1/1/2013, iif(ID = 2, 1/2/2013, iif(ID = 3, 1/ 3/2013 ......)))。我认为必须有一种方法可以每月执行此操作,而无需手动更改。

标签: arrays loops ms-access vba record-count


【解决方案1】:

您上面的评论说该表不包含日期,但您正在尝试将日期字段添加到表中。

很遗憾,您无法将新字段(列)添加到这样的表中。您需要在设计视图中执行此操作,或者在运行时在数据库上运行 ALTER 语句:

ALTER TABLE myTableName ADD COLUMN dateColumnName Date Null;

如果你想设置列的值,希望你的表有一个唯一的 id,数据类型为 counter(?) 我建议你使用更新查询:

UPDATE myTableName SET dateColumnName = CDate("1/" & trim(uniqueIDColumnName) & "/2013");

【讨论】:

  • 谢谢约翰,这正是我想要做的。我的记录确实有唯一的 ID。明天试试这个。
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多