将记录存储在类的实例中,以便在程序的整个生命周期中的任何位置都可用

时间:2015-01-12 03:35:01

标签: access-vba

我有一个带有组合框的表单,我用来自访问数据库的记录填充(我使用链接表)。我想要做的是在程序的整个生命周期中将记录存储在类的实例中,而不是每次用户选择组合框时查询表。现在我从私有子调用一个函数,该函数返回DAO记录集数据,这是我想要的,但我的问题是,我如何将数据从函数记录集传递给公共DAO.Recordset,假设如果这是可能的话,它将在运行程序的整个生命周期中保存记录集数据。当我运行代码并完成Watch输出窗口中的Public Rs()时说; Recordset(0到-1)和No Variables,我不知道如何纠正这个问题。

这是我的代码:

Private Sub cmdGetRecordset_Click()
    Dim strDescription As String  
    Dim strModel As String  
    Dim rst As DAO.Recordset  

    Set rst = getdevices()  

    Do While Not rst.EOF  
        strDescripton = rst!DESC  
        strModel = rst!MODEL  

        Debug.Print strDescription & "  " & strModel  

        rst.MoveNext  
    Loop  
    'rst.Close'  
    'Set rst = Nothing'  
End Sub

'' '' ''

Option Compare Database

Public Rs() As DAO.Recordset

Function getdevices() As DAO.Recordset
    Dim Rs As Object  
    Dim CurDatabase As Object  

    connectDatabase  
    Set CurDatabase = CurrentDb  
    Set Rs = CurDatabase.OpenRecordset("SELECT * FROM tblCDA") 
    Set getdevices = Rs
    closeDatabase
End Function

1 个答案:

答案 0 :(得分:1)

说实话,我并不完全明白你的目标。根据您尝试做的事情,有很多方法可以解决这个问题。

1)你只是在表单加载时预先填充控件吗?

每次加载表单时在Form_Load事件中运行一系列查询,并将结果传递给每个组合框作为其源,或者在打开数据库时创建一个包含值的临时表并查询temp表

2)您是否尝试捕获在表单或报表之间移动时用户选择的持久状态?

使用临时表或动态数组捕获用户选择(组合框的值)并查询表或在引用其他位置的值时遍历数组。

3)您是否尝试根据用户选择动态更改组合框值?

可悲的是,我认为必须重新查询源数据是唯一的选择。您可以从各种表中获取所有数据并使用数组将其存储在内存中,然后根据需要迭代数组以更改组合框值,但这将占用大量内存,具体取决于数据。