2014-10-14 2 views
0

У меня есть Datasheet как подчиненная форма моего MainForm. В то время как MainForm открыт и применяется фильтр, я пытаюсь собрать данные об отфильтрованном файле ... затем (в конечном счете) шаг через таблицу по строкам (через .movenext, я полагаю):MSAccess: Datasheet Properties (as subform) - Form Not Open, Err: 2489?

Во всяком случае, вот быстрый тест с помощью события OnClick из второй формы (всплывающие/модальный):

If Forms!Mainform![Data subform].Form.FilterOn = True Then 
     msgbox "Filter is ON" 
     Forms!Mainform![Data subform].SetFocus 
     msgbox Forms!Mainform![Data subform].RecordCount 
     DoCmd.GoToRecord acDataForm, "Forms!Mainform![Data subform]", acFirst 
     msgbox Forms!Mainform![Data subform].Form.ItemID.value 
    Else 
     msgbox "Filter is OFF" 
    End If 

доступа может видеть, когда FilterOn = True, но жалуется форма не открыта (Err: 2489), когда я пытаюсь перейти к первой записи. MainForm действительно открыт.

Я предполагаю, что мои подформационные ссылки виноваты, но мои корректировки пока не сработали.

Любые идеи для оказания помощи, пожалуйста?

+0

Я считаю, что проблема связана с именем объекта. т. е. у вас есть «Forms! Mainform! [Data subform]», но это буквальный текст, который, как я думаю, не решит объект во время выполнения. Плюс, так как ваш код находится в вашей подформе, я бы использовал «DoCmd.GoToRecord acDataForm, Me. , acfirst –

+0

Создание публичного элемента в MainForm для выполнения работы и вызова этого из всплывающих форм! MainForm.PublicSubName [args] будет отрицать взаимозависимость MainForm со всплывающей формой - то есть в будущем, если MainForm будет изменен, вам также не придется изменять всплывающее окно, если сам PublicSubName вызывает общедоступный суб, определенный в подформе как SubFormName.SubFormPublicSubName [args], тогда вы переместите логику в саму субформацию, где вы можете напрямую опросить свойства самого себя, и, если нужно, используйте непосредственное окно, чтобы понять, что происходит не так. –

+0

Спасибо, Уэйн и Джон, я собирался поставить публичный Sub в MainForm, как вы заметили, но нашел, что метод RecordsetClone будет делать то, что мне нужно. Я не ожидал, что он обработает фильтрованный файл данных, как он. –

ответ

2

Вау, я шел по совершенно неправильному пути. Следующий подход RecordsetClone предоставляет мне именно тот доступ, который мне нужен для всех данных подфайла FILTERED datasheet (простой пример ниже, чтобы просто выполнить шаг за всеми записями).

Public Function mySelect() 

    Dim rstData As dao.Recordset 
    Set rstData = Forms!Mainform![Data subform].Form.RecordsetClone 

    msgbox rstData.RecordCount 
    rstData.MoveFirst 
    Do Until rstData.EOF 
     msgbox rstData.Fields(0) 'Field(0) = ItemID 
     rstData.MoveNext 
    Loop 

End Function 

Я уже делаю записи в этом же приложении, только в немного другом контексте. Сумасшедший, я так скучал по нему.

В любом случае, я должен идти.

Thanks ~