2016-10-03 3 views
0

Я новичок в Access, пытаясь совместить вещи вместе с полезной информацией, которую я нашел здесь.Форма не работает, если запрос на подставку не был сохранен

У меня есть форма, которая должна заполнять поля на основе выбора поля со списком в заголовке формы. Форма основана на базовом запросе со следующими критериями для поля «StudID» [Forms]! [FrmStudConsentUpdate]! [CmbStud], где cmbStud - это поле со списком. В поле со списком входят StudID, StudFN, StudLN с StudID как связанный столбец. Событие после обновления запрашивает форму (Me.Requery). Это прекрасно работает, но только если я сначала открою форму в режиме дизайна, откройте Источник записи и сохраните ее. Я не вношу никаких изменений, но как только я это сделал, эта форма работает. В противном случае ничего не происходит, когда я выбираю ученика в поле со списком. Любые мысли о том, что мне нужно сделать, чтобы сделать эту работу без необходимости повторного сохранения базового запроса?

+0

Кажется, что это нормально на поверхности, можно ли загрузить свою базу данных? Если так, я посмотрю. – JCro

ответ

0

Это старая ошибка в MS Access, я понятия не имею, почему они все еще не исправили ее: Если запрос базовой формы имеет в форме формы критериев, и форма была отфильтрована один раз (при запуске или вручную/с использованием VBA) , он не принимает новые значения из контроля формы и использует старое значение.

Обход проблемы: создать публичную функцию, которая возвращает значение управления и использует его в критериях вместо [Forms]![frmStudConsentUpdate]![cmbStud]. Вам нужно будет создать функцию для каждого элемента управления или использовать эту функцию:

Public Function GetControlValue(strFormName As String, strControlName As String, Optional strSubFormControlName As Variant, Optional varDefault As Variant) As Variant 
' Returns : Variant, value of control in form/subform 
' Comments: 
' Params : 
'   strFormName 
'   strControlName 
'   strSubFormControlName 
'   varDefault - value returned if control is not accessible 
'---------------------------------------------------------------------------- 
On Error GoTo ErrorHandler 

If IsMissing(strSubFormControlName) Or Nz(strSubFormControlName, "") = "" Then 
    GetControlValue = Forms(strFormName).Controls(strControlName).Value 
Else 
    GetControlValue = Forms(strFormName).Controls(strSubFormControlName).Form.Controls(strControlName).Value 
End If 

ExitHere: 
    On Error Resume Next 
    Exit Function 

ErrorHandler: 
    If Not IsMissing(varDefault) Then 
     GetControlValue = varDefault 
    End If 
    Resume ExitHere 
End Function 

В критериях использование вызова функции GetControlValue("frmStudConsentUpdate","cmbStud") вместо [Forms]![frmStudConsentUpdate]![cmbStud]

+0

Большое спасибо, Сергей. Я смог реализовать ваше решение и создать публичную функцию, и я изменил критерии запроса. Тем не менее, форма все еще не обновляется после того, как значение выбрано в поле со списком, если я не открою базовый запрос и не сохраню его первым. Возможно, мне не хватает шага? –

+0

Попробуйте сохранить запрос в качестве источника записи в виде сохраненного запроса и выбрать его в качестве источника записей –

+0

Я думал об одном и том же, но это тоже не сработало. –

0

В вашем AfterUpdate для вашего cmbStud выпадающего списка, создать код, который обновляет RecordSource в

me.recordsource = "SELECT * FROM {yourQueryName} WHERE StudID = '" & me!cmbStud & "'"

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