2015-01-12 1 views
0

У меня есть форма с комбинированным ящиком, в котором я заполняю записи из db доступа (я использую связанные таблицы). То, что я хотел бы сделать, - хранить записи в экземпляре класса на протяжении всего жизненного цикла программы, а не запрашивать таблицу каждый раз, когда пользователь выбирает поле со списком. Сейчас я вызываю funtion из частного sub, функция возвращает данные набора записей DAO, которые я хочу, но у меня есть вопрос, как передать данные из набора записей функций в общедоступный DAO.Recordset, предполагая, что если бы это было возможно, оно хранило данные набора записей на протяжении всего жизненного цикла программы. Когда я запускаю код, и он заканчивает Public Rs() в окне вывода Watch, говорит: 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

Я не полностью понимаю вашу цель, чтобы быть честным. В зависимости от того, что вы пытаетесь сделать, есть несколько способов решить эту проблему.

1) Вы только предварительно заполняете элементы управления, когда загружается форма?

Либо запускайте серию запросов в событии Form_Load каждый раз, когда форма загружается, и передает результаты в каждое поле со списком в качестве источника. Или создайте временную таблицу со значениями при открытии базы данных и запросите таблицу temp.

2) Вы пытаетесь зафиксировать постоянное состояние того, что пользователь выбрал при перемещении между формами или отчетами?

Используйте временную таблицу или динамический массив для захвата пользовательских выборов (значения comboboxes) и запроса таблицы или итерации по массиву при ссылке на значение где-то еще.

3) Вы пытаетесь динамически изменять значения combobox на основе пользовательских настроек?

К сожалению, мне нужно, чтобы исходные данные были единственным вариантом здесь. Вы можете получить все данные из разных таблиц и сохранить их в памяти с помощью массивов, а затем перебирать массивы по мере необходимости, чтобы изменить значения combobox, но это будет значительным объемом памяти в зависимости от данных.

+0

Что я хотел бы сделать, это хранить исходные данные в памяти с помощью массивов и перебирать их. Какой был бы лучший способ сделать это? Не могли бы вы привести примеры кода? – rgraham

Смежные вопросы