Выполнение проверки формы в проекте Access 2003 ADP - PullRequest
2 голосов
/ 07 января 2009

Я занимаюсь разработкой базы данных Access 2003, которая использует серверную часть MS SQLServer.

Я пытаюсь выполнить проверку формы и у меня возникли некоторые проблемы.

  1. ValidationRule для каждого поля, кажется, игнорируется
  2. Я не могу понять, какое событие я должен переопределить для принудительной проверки, если база данных не сделает это. (Я не против, мне просто неизвестно, как я ловлю сообщения об ошибках вместо того, чтобы отображать их пользователю)

Я пытался обойти номер 2, запретив закрытие и принудительно используя «кнопку закрытия», но пользователь может шагнуть по нему, нажав клавишу Tab или кнопку «Следующая запись» внизу. 1011 *

Любые предложения будут с благодарностью.

Ответы [ 3 ]

1 голос
/ 07 января 2009

Если вы используете свойство правил проверки, вы можете отловить ошибки проверки и дублирования ключей, среди прочего, в событии Ошибка формы:

Private Sub Form_Error(DataErr As Integer, Response As Integer)
   If DataErr=2107 Then
      MsgBox "Validation error! "  & ActiveControl.Name
   End If
End Sub

Вы можете принудительно использовать кнопку закрытия с переменной, определенной на уровне формы и установленной в значение false, если только ваша кнопка не нажата.

Option Compare Database
Option Explicit

Public AllowClose As Boolean

Private Sub Form_Load()
    AllowClose = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Cancel = Not AllowClose
End Sub
Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click

    AllowClose = True
    DoCmd.Close

Exit_cmdClose_Click:
    Exit Sub

Err_cmdClose_Click:
    MsgBox Err.Description
    Resume Exit_cmdClose_Click

End Sub

От: http://www.tek -tips.com / faqs.cfm? Fid = 2071

1 голос
/ 10 января 2009

Вы можете скрыть кнопки навигации, установив для свойства формы «Кнопки навигации» значение «Нет». Вы также можете запретить вкладки для новой записи, установив для свойства Cycle формы значение «Текущая запись».

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

1 голос
/ 07 января 2009

Если вы приведете пример одного из ваших правил проверки, это может помочь.

Однако у меня была привычка ставить валидацию в Before Update (особенно когда у меня есть более сложные алгоритмы валидации)

Обновление: Я провел некоторые эксперименты, и кажется, что правило проверки для поля проверяется ТОЛЬКО при обновлении поля, но не при обновлении в другом месте формы, а не при сохранении записи. Поэтому я думаю, что ваше решение - перенести валидацию в Form_BeforeUpdate.

ИЛИ вы можете сделать столбец в таблице ненулевым - что заставит пользователей что-то делать с полем.

ИЛИ, если поле должно быть «Тестирование», то вы можете обойти все целиком, установив значение по умолчанию и заблокировав поле, чтобы пользователь не мог его изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...