Форум программистов, компьютерный форум, киберфорум
Наши страницы

MS Access

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Kkarn
592 / 187 / 25
Регистрация: 02.12.2014
Сообщений: 888
#1

При каких событиях формы Access сохраняет запись? - MS Access

12.12.2014, 19:13. Просмотров 2209. Ответов 46
Метки нет (Все метки)

Добрый день. Подскажите, пожалуйста.
Есть форма, основанная на таблице. Если пользователь начинает вводить новую запись и, недовводив все поля, закрывает форму - данные сохраняются в таблице. В самой таблице не установлены проверки на значения и условия обязательности полей, проконтролировать можно только из формы. Как предотвратить в таком случае незаполнение всех нужных полей?..
Я так понимаю, нужно посадить на события формы, которые связаны с сохранением записи, какие-нибудь макросы или код для проверки и отмены сохранения недозаполненной записи? Подскажите, пожалуйста, какие именно события вызывают сохранение записи. Одно - закрытие формы - я как бы уже знаю)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2014, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При каких событиях формы Access сохраняет запись? (MS Access):

Столкнулся с проблемой при создании главной формы в access 2010, точнее не могу сделать картинку в размер формы - MS Access
Всем доброго времени суток=) Столкнулся с проблемой при создании главной формы в access 2010, точнее не могу сделать картинку в размер...

MS Access 2010. Запись из одной формы в другую форму с подчиненной формой - MS Access
Здравствуйте. У меня уже едет крыша. Но мне нужна помощь. Форм там много но я напишу названия тех которые должны взаимодействовать. В...

запись кода в процедуру обработки событий свойства поля формы в VB ACCESS - MS Access
есть форма состоящая из 2 полей и кнопке ок: 1 поле последняя дата, должна читаться из таблицы базы данных; 2 поле мы вводим новую...

Не сохраняет данные в базе Access - MS Access
Добрый вечер, Замечаю неоднократно, что после ввода данных в базу, не сохраняются данные. Сначала списал на свою невнимательность и...

Закрытие access при закрытии формы - MS Access
В общем такая проблема Вешаю на событие закрытия формы макрос ВыйтиИзAccess, всё работает, но при переходе в режим конструктора этой...

При запуске access остается последняя запись на форме - MS Access
при запуске access остается последняя запись на форме при запуске всегда было пустым. как убрать?

46
ltv_1953
12254 / 5539 / 1018
Регистрация: 21.06.2012
Сообщений: 9,921
12.12.2014, 19:18 #2
Цитата Сообщение от Kkarn Посмотреть сообщение
Я так понимаю, нужно посадить на события формы, которые связаны с сохранением записи,
Именно так, все проверяется в событии Form_BeforeUpdate, отменяя сохранение записи, если условия не выполнены.
1
Kkarn
592 / 187 / 25
Регистрация: 02.12.2014
Сообщений: 888
12.12.2014, 21:31  [ТС] #3
Хорошо, а можно я тогда переформулирую вопрос? Допустим, мне нужно сделать так: если пользователь вводил данные в форму, потом нажал кнопку Закрыть, НЕ НАЖАВ при этом кнопку "Сохранить данные", которую я специально создал для этого в форме - то мне нужно, чтобы эти данные НЕ СОХРАНЯЛИСЬ в таблицу вообще, независимо от того, даже если пользователь ввел все нужные данные. Не нажал, закрыл - получай то, что данные не сохранились. Как такое реализовать правильно? Подскажите, пожалуйста, че-то я уже совсем заработался, не могу сообразить...
0
commun
369 / 214 / 9
Регистрация: 29.10.2014
Сообщений: 853
12.12.2014, 22:07 #4
Если обновлено поле КодЗаписи, то запись уже сохранена и в дальнейшем Вы только изменяете значения др.полей. Можно применять Условие на значение для нужных полей формы,но нужно, чтобы польз-ль захотел их посетить,а это можно с одним полем ,сделав ему 0-е Tab
0
Kkarn
592 / 187 / 25
Регистрация: 02.12.2014
Сообщений: 888
12.12.2014, 22:14  [ТС] #5
Я понимаю, что если обновлено поле КодЗаписи, то запись уже сохранена. Мне нужно, чтобы если пользователь не нажал мою кнопку Сохранить и просто закрыл форму - эта запись была УДАЛЕНА из таблицы.
0
mobile
22191 / 12507 / 2501
Регистрация: 28.04.2012
Сообщений: 13,720
12.12.2014, 22:37 #6
Когда Вы нажимаете крестик для выхода из формы, то запись уже в таблице. Уже сохранена. Восстановить (Undo) уже невозможно. Но можно удалить. Для удаления нужно точно знать какую запись удалять. Если в таблице есть уникальное поле, то это сделать нетрудно.
Например, можно с двумя глобальными (или уровня формы) переменными ID - уникальный номер записи и DRT - признак того, что была редакция записи. Тогда необходимые действия будут такими
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim drt As Boolean, ID 'Объявляем переменные уровня формы
 
Private Sub Form_BeforeUpdate(Cancel As Integer) 'Событие формы До обновления
'Взводим флажок и запоминаем ид
    drt = True
    ID = Me.id
End Sub
 
Private Sub Сохранить_Click() 'Кнопка сохранить
'Снимаем флажок
    drt = False
End Sub
 
Private Sub Form_Current() 'Текущая запись
'Снимаем флажок
    drt = False
End Sub
 
Private Sub Form_Unload(Cancel As Integer) 
'На событии Выгрузка, если флажок взведен, то удалить запись
    If drt Then
        CurrentDb.Execute "delete * from Таблица where id=" & ID
    End If
End Sub
1
commun
369 / 214 / 9
Регистрация: 29.10.2014
Сообщений: 853
12.12.2014, 22:54 #7
ну а если так
0
Вложения
Тип файла: rar Контроль.rar (387.0 Кб, 19 просмотров)
Волшебник 307
1252 / 317 / 44
Регистрация: 16.04.2013
Сообщений: 754
Записей в блоге: 2
12.12.2014, 23:41 #8
Или сделать поля свободными.
Тогда ничего не сохранится.

А по кнопке Сохранить
выполнить запрос на добавление.
0
commun
369 / 214 / 9
Регистрация: 29.10.2014
Сообщений: 853
12.12.2014, 23:48 #9
Это еще правильнее,только запрос на добавление выполнится медленнее, чем код VBA
0
Волшебник 307
1252 / 317 / 44
Регистрация: 16.04.2013
Сообщений: 754
Записей в блоге: 2
12.12.2014, 23:58 #10

Запрос написать в коде VBA.
0
commun
369 / 214 / 9
Регистрация: 29.10.2014
Сообщений: 853
13.12.2014, 00:14 #11
это не меняет дела ни на одну нсек
0
Kkarn
592 / 187 / 25
Регистрация: 02.12.2014
Сообщений: 888
13.12.2014, 00:28  [ТС] #12
mobile, Спасибо большое, Вы меня в очередной раз выручаете, это оказалось как раз то, что нужно!
0
mobile
22191 / 12507 / 2501
Регистрация: 28.04.2012
Сообщений: 13,720
13.12.2014, 00:34 #13
Цитата Сообщение от Волшебник 307 Посмотреть сообщение
Или сделать поля свободными.
Тогда ничего не сохранится.
А по кнопке Сохранить
выполнить запрос на добавление.
Когда студенты создают свободные формы, я понимаю - это их максимум. Но когда Волшебник... А тот ли это волшебник?

Акцесс это реляционная база данных + формы, основанные на данных (исключение формы-контейнеры; свободные формы для поиска, фильтрации, задания параметров; кнопочные формы). Все остальное когда выполнены эти 2 условия. Если не выполнены, то акс не нужен. Есть масса других средств, более подходящих для решения таких задач.
0
Волшебник 307
1252 / 317 / 44
Регистрация: 16.04.2013
Сообщений: 754
Записей в блоге: 2
13.12.2014, 00:40 #14
на них и ориентируемся.
0
mobile
22191 / 12507 / 2501
Регистрация: 28.04.2012
Сообщений: 13,720
13.12.2014, 01:39 #15
Цитата Сообщение от Kkarn Посмотреть сообщение
Вы меня в очередной раз выручаете, это оказалось как раз то, что нужно!
А вот и нет

В предложенном выше решении был вариант только для новой записи. А если редактировалась существующая запись, то она бы тоже удалилась. Что наверное, никак не входит в Ваши планы.

Вот вариант с учетом редакции существующей записи. При этом все поля запоминаются в массиве на событии Текущая запись и, если не нажата кнопка Сохранить, то запись обновляется из массива
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Dim drt As Boolean, ID, NewRec As Boolean, Rec 'Объявляем переменные уровня формы
 
Private Sub Form_BeforeUpdate(Cancel As Integer) 'Событие формы До обновления
'Взводим флажок и запоминаем ид
    drt = True
    ID = Me.id
End Sub
 
Private Sub Сохранить_Click() 'Кнопка сохранить
'Снимаем флажок
    Me.Dirty = False
    drt = False
End Sub
 
Private Sub Form_Current() 'Текущая запись
'Снимаем флажок. Если запись новая, взводим флажок NewRec
    Dim i
    NewRec = False
    drt = False
    If Me.NewRecord Then
        NewRec = True
    Else
        ReDim Rec(Me.Recordset.Fields.Count - 1)
        For i = 0 To UBound(Rec)
            Rec(i) = Me.Recordset.Fields(i)
        Next
    End If
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
'На событии Выгрузка, если флажок взведен, то удалить запись
    Dim i
    If drt And NewRec Then
        CurrentDb.Execute "delete * from Таблица where id=" & ID
    ElseIf drt And Not NewRec Then
        With Me.Recordset
            .Edit
            For i = 0 To UBound(Rec)
                .Fields(i) = Rec(i)
            Next
            .Update
        End With
    End If
End Sub
3
13.12.2014, 01:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2014, 01:39
Привет! Вот еще темы с ответами:

Очистка поля при открытии формы - MS Access - MS Access
В поле вводится число и каждый раз разное. Нужно, чтобы при открытии формы поле очищалось. То есть число записывается, по кнопке данные...

Открытие формы с информацией при нажатии на запись в списке - MS Access
всем привет! помогите пожалуйста с курсовой, а то застряла на этом моменте... вопрос такой: возможно ли сделать так, чтобы в форме...

Access 2010 копирование данных ячеек при обновлении формы - MS Access
Здравствуйте, не получается скопировать данные из ячеек при обновлении формы ввода.. Подскажите, как это можно сделать?

Связать две формы при добавлении данных Access 2010 - MS Access
Доброго дня, тапками не кидаться, я только постигаю азы. Суть проблемы в следующем: Есть таблица/формы пользователи и сеть. В форме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.