首页 > 解决方案 > 将数据从表插入到集合 vba 访问

问题描述

我是 VBA 访问的新手,我想做的是将表中的数据放入集合中,但是当我这样做并检查集合时,所有行都有我加载的最后一行的数据。

Public Function projectStart() As Collection

    Dim cn As New ADODB.connection

    Dim rs As New ADODB.Recordset
    
    Set cn = CurrentProject.connection
    
    Dim sqlQuery As String

    Set projectStart = New Collection
    
    
    sqlQuery = "select * from p6projects"
    rs.Open sqlQuery, cn
    Do Until rs.EOF
        Dim cashFlow As New cashFlow
        
        cashFlow.letIdproject = rs!id
        cashFlow.letStartDate = rs!startDate
        cashFlow.letBlstartdate = rs!blStartDate
        projectStart.Add cashFlow
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    
    cn.Close
    Set cn = Nothing
    
End Function

我正在从一个表中加载 10 行,当我打印它们时,我会看到这个,任何行中的相同数据。

10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019
10 2/6/2019 2/6/2019

标签: vbams-accessms-access-2010

解决方案


在大多数情况下,当您使用

rst!StartDate  

好吧,您正在返回 FIELD 对象。这不是一个值,而是一个实际的 DAO 对象类型的字段。

在“大多数”情况下,如果您要转换为字符串,在大多数情况下,访问会自动为您执行此操作。

但是,集合能够保存字符串,甚至对象类型。因此,在您的代码中,您实际上是在添加对字段对象的引用,而不是值。

所以,你需要这样做:

cashFlow.letIdproject = rs!id.Value
cashFlow.letStartDate = rs!startDate.Value
cashFlow.letBlstartdate = rs!blStartDate.Value

因此,现在您将值保存到集合中,而不是对字段控件的引用。如果您保存对该字段的引用,那么它将是您保存的该字段列引用的所有实例所在的任何行。

编辑:看上面, .value 实际上不应该是必需的。

展示我们在收藏中放置的内容?

这将起作用: cashFlow.letIdproject = rs!ID cashFlow.letStartDate = rs!StartDate cashFlow.letBlstartdate = rs!blStartDate

Dim c As cashFlow
For Each c In projectStart
  Debug.Print c.ID, c.StartDate, c.letBlstartDate

下一个

我们的课程模块呢?好吧,我们假设这个类模块名为 cashFlow。

Option Compare Database
Option Explicit
  
Public letIdproject as long
Public letStartDate as date
Public letBlstartdate as date

您必须提供有关自定义类模块外观的更多信息,但上述代码方法应该有效。


推荐阅读