Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2018, 23:00   #1
6element
 
Регистрация: 09.12.2017
Сообщений: 4
По умолчанию Сохранение введенных данных с проверкой

Здравствуйте! Нужна помощь! Есть форма, в которой в зависимости от значения Флажка9 поле WIN либо доступно либо нет. При нажатии на кнопку "Сохранить" запускается функция funCmdApply(), которая проверяет, заполнены ли обязательные поля. Что нужно изменить в этой функции, чтобы она проверяла только те поля, к которым в момент сохранения есть доступ. Т.е. в этом конкретном примере игнорировала при сохранении поле WIN, если оно недоступно и проверяло его заполнение, если оно доступно. Пример прилагается. Заранее благодарю за помощь.
Вложения
Тип файла: zip База данных5.zip (29.8 Кб, 16 просмотров)
6element вне форума Ответить с цитированием
Старый 23.02.2018, 05:51   #2
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от 6element Посмотреть сообщение
чтобы она проверяла только те поля, к которым в момент сохранения есть доступ.
Дополнительно проверяйте что контроль доступен:
If ctl.Enabled = True Then 'контроль доступен
' ...

End If
Eugene-LS вне форума Ответить с цитированием
Старый 23.02.2018, 07:11   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вы пробовали так писать? Приложите, пожалуйста, рабочий пример базы
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.02.2018, 10:47   #4
6element
 
Регистрация: 09.12.2017
Сообщений: 4
По умолчанию

Пробовал. Ошибку выдает. Не пойму, может не в то место цикл вставляю. Буду еще пробовать.
6element вне форума Ответить с цитированием
Старый 23.02.2018, 17:22   #5
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от 6element Посмотреть сообщение
Ошибку выдает. Не пойму, может не в то место цикл вставляю.
Код:
Function funCmdApply()
On Error GoTo Err_
Dim frm As Form
Dim ctl As Control
Set frm = Screen.ActiveForm 'получаем ссылку на активную форму
'делаем пробежку по контролам формы
For Each ctl In frm.Controls
    'ищем в Tag контролов типа поле и поле со списком символ !
    If (ctl.ControlType = acComboBox Or ctl.ControlType = acTextBox) And ctl.Tag = "!" Then
        If ctl.Enabled = True Then 'контроль доступен
            'ставим фокус на поле - иначе не удастся прочитать его свойство Text
            ctl.SetFocus
            'если поле пустое - выводим сообщение и выходим из функции
            If Nz(ctl.Text, "") = "" Then
                MsgBox "Укажите " & ctl.StatusBarText, vbCritical, "Сохранить изменения"
                Exit Function
            End If
        End If
    End If
Next
'если все нужные поля заполнены - обновляем запись и закрываем форму
frm.Refresh
DoCmd.Close acForm, frm.Name
'DoCmd.OpenForm " Start ", , , , stLinkCriteria
Set frm = Nothing
Exit Function

Err_:
    MsgBox Err.Description
Err.Clear
End Function
И работает как просили.
Или я чего не понимаю.

Кстати код далеко не оптимален, у вас, но работает и ладно (сойдёт и так).
На мой скромный взгляд, например, ссылку на форму лучше в аргументе предавать, а не использовать:
Set frm = Screen.ActiveForm
... Ибо там (в "ActiveForm") может оказаться не то что нужно при нескольких открытых формах.
Вложения
Тип файла: zip База данных5_v02.zip (33.9 Кб, 14 просмотров)

Последний раз редактировалось Eugene-LS; 23.02.2018 в 17:47.
Eugene-LS вне форума Ответить с цитированием
Старый 23.02.2018, 17:33   #6
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от 6element Посмотреть сообщение
Пробовал. Ошибку выдает. Не пойму, может не в то место цикл вставляю. Буду еще пробовать.
А можно просто и не меняя функции funCmdApply() :

Код:
Private Sub Флажок9_AfterUpdate()
    If Me.Флажок9 = True Then
        Me!WIN.Enabled = True
        Me!WIN.Tag = "!"
    Else
        Me.WIN.Enabled = False
        Me.WIN.Value = Null 
        Me!WIN.Tag = ""
    End If
End Sub
... раз уж вы за свойство Tag "цепляетесь"
Это как вариант.

Последний раз редактировалось Eugene-LS; 23.02.2018 в 17:42.
Eugene-LS вне форума Ответить с цитированием
Старый 24.02.2018, 09:55   #7
6element
 
Регистрация: 09.12.2017
Сообщений: 4
По умолчанию

Огромное спасибо! Все работает как надо.
6element вне форума Ответить с цитированием
Старый 24.02.2018, 11:05   #8
6element
 
Регистрация: 09.12.2017
Сообщений: 4
По умолчанию

Итак, для неопытных разработчиков. Инструкция. Копируете модуль "Module1" в свою базу данных. На нужных кнопках в "свойствах", "События", "Нажатие кнопки" вписываете =funCmdApply() или =funFormUndo().
В полях, заполнение которых обязательно "Свойства", "Другие", "Дополнительные сведения" ставите восклицательный знак и заполняете "Текст строки состояния" нужной вам фразой подсказки. И всё.
Активировать и деактивировать поля можно не только с помощью флажка, но и группой переключателей. Тогда процедура обработки событий будет выглядеть так "Свойства", "События", "После обновления":
Private Sub Группа11_AfterUpdate()
If Me.Группа11 = 2 Then
Me.WIN.Enabled = True
Else
'Me.WIN.Locked
Me.WIN.Enabled = False
Me.WIN.Value = ""
End If
End Sub

В этой строчке If Me.Группа11 = 2 Then цифра 2 значение переключателя, которое активирует поле.
Me.WIN.Value = "" это очистка поля при его деактивации.

Последний раз редактировалось 6element; 24.02.2018 в 11:09.
6element вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не происходит сохранение введенных значений Belfire C# (си шарп) 0 14.06.2017 03:39
Проблема с Проверкой данных ssg Microsoft Office Excel 3 20.04.2013 23:56
Сохранение введенных данных в файл d.scorp JavaScript, Ajax 1 06.04.2011 20:49
Сохранение ранее введенных значений в TEdit Pcrepair Общие вопросы Delphi 10 07.01.2011 19:38
Проверка введенных данных viscas PHP 4 01.06.2009 02:41