2015-06-09 2 views
1

У меня есть datagrid, который является подформой внутри другой формы. Мне нужно проверить элементы, введенные в эту подформату datagrid, но я испытываю мучительное затруднение в определении того, как это сделать.Правила проверки доступа MS не срабатывают в подформе

Всякий раз, когда я читал об этом на форумах и на справочном сайте Microsoft, они рекомендуют использовать правила Required и Validation на уровне таблицы. Но поскольку это все связанные таблицы, Access сообщает мне, что они не могут быть сохранены/не применимы к моей ситуации. Когда я сохраняю эти настройки, они меняются на значения по умолчанию, когда я повторно открываю представление таблицы.

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

На моей колонке FromDate я разместил правило проверки Is Not Null и текст проверки Can't be blank. Я также пробовал Not IsNull([FromDate]) и IsNull([FromDate])=0, но все они имели тот же результат, что ничего не происходило. MS Access позволяет мне пропускать поля, ничего не вводить и продолжать.

Проще говоря, правила проверки не срабатывают.

1- Должен ли я проверять datagrid через его правила проверки листа свойств Datagrid?

2- Если да, то как мне получить валидацию для фактического пожара и выполнить проверку?

3- Если я должен выполнять все процедуры программно, как я могу получить содержимое datagrid/iterating через каждую новую строку?

картинки ниже: Слева: подчиненный/ справа: свойства моей колонки в таблице

enter image description hereThe subform

картинка ниже: Левые: Связанная таблица сообщений о том, что я не могу редактировать таблицу свойства

enter image description here

+0

Не можете ли вы открыть базу данных, содержащую исходную таблицу, на которую указывает ссылка, и установить Required = Yes для поля FromDate? – HansUp

+0

@HansUp Я мог бы, но я унаследовал этот проект, который подключен к другим проектам и будет катастрофой. –

+0

Ваш второй абзац меня смутил. Таким образом, дело не в том, что вы не можете изменить Required для исходного поля; вы на самом деле не хотите. У меня есть это прямо сейчас? – HansUp

ответ

1

Используйте форму Перед обновлением событие, чтобы проверить, FromDate Null.

Когда это Null, уведомите пользователя и отмените обновление (Cancel = True).

Сохраните существующее Правило проверки для текстового поля. Это даст пользователю немедленную обратную связь, если они попытаются удалить значение из текстового поля (вместо того, чтобы отложить уведомление до тех пор, пока Access не попытается сохранить всю запись).

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    Dim strPrompt As String 
    If IsNull(Me!FromDate.Value) Then 
     strPrompt = "FromDate can't be blank" 
     MsgBox strPrompt, vbInformation + vbOKOnly, "Missing Value" 
     Me!FromDate.SetFocus 
     Cancel = True 
    End If 
End Sub 

тест, чтобы увидеть ли вам также нужно ту же стратегию в форму-х Перед Вставка события. Если вы это сделаете, переместите этот код в отдельную процедуру и вызовите его как из Before Insert, так и Перед обновлением.

+1

Благодарим вас за отмену, что спасло меня от путаницы. –

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