powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сохранение изменений
6 сообщений из 6, страница 1 из 1
Сохранение изменений
    #39182051
Sorb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех. В Access только начинаю, но уже возникла такая проблема: имеется форма для редактирования записей. При открытии формы(так как граф много) делается запрос и заполняются поля, дабы пользователю все данные не пришлось вновь вносить. Вот только возникла одна проблема: как только заполняется любое поле-сразу же вносятся изменения в бд. Как возможно сделать так, чтобы изменения вносились сразу пачкой и только по нажатию кнопки?
...
Рейтинг: 0 / 0
Сохранение изменений
    #39182053
Sorb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить, если это требуется: В самой форме 2 столбца: с начальными данными(заблокированы для редактирования) и с полями для редактирования делается все на vba. при открытии формы с главной передается аргумент, затем идет Form_Load для загрузки данных из таблицы в форму. Переменные "New_" - это переменные полей для редактирования.
Код формы:
Код: vbnet
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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
Private Sub Form_Open(Cancel As Integer)
 If IsNull(Me.OpenArgs) Or Me.OpenArgs = "" Then
        MsgBox ("Возникла проблема")
    
 End If
End Sub

Private Sub Form_Load()

        
        Dim rs As dao.Recordset
    	Set rs = CurrentDb.OpenRecordset("SELECT * FROM [Все_ИП] WHERE ИП = '" & Me.OpenArgs & "';")
    If Not rs.EOF Then
        Me.ИП = rs!ИП
        Me.местонахождение = rs!местонахождение
        Me.Год = rs!Год
        Me.В_норме = rs!В_норме
        Me.Примечание = rs!Примечание
    End If
           
 End Sub

 
Private Sub ОК_Click()
If IsNull(Me.New_ИП) Or Me.New_ИП = "" Then
        MsgBox ("Введите ИП")
        

Else
     Dim rs0 As dao.Recordset
        Set rs0 = CurrentDb.OpenRecordset("Измененные_ИП", dbOpenDynaset)
        rs0.AddNew
        rs0!ИП= Me!ИП
        rs0!местонахождение= Me!местонахождение
        rs0!Год= Me!Год
        rs0!В_норме= Me!В_норме
        rs0!Примечание= Me!Примечание
        rs0!Дата_изменения = Date
                        
        rs0.Update
        rs0.Close
        Set rs0 = Nothing
        
        Dim entry As String
        entry = Me.New_ИП
        
          Dim sql2 As String
        sql2 = "DELETE * FROM [Все_ИП] " & _
              "WHERE ИП = '" & entry & "';"

        DoCmd.RunSQL sql2



         Dim rs As dao.Recordset
        Set rs = CurrentDb.OpenRecordset("Все_ИП", dbOpenDynaset)
        rs.AddNew
        rs!ИП= Me!New_ИП
        rs!местонахождение = Me!New_местонахождение
        rs!Год= Me!New_Год
        rs!В_норме = Me!New_В_норме  
        rs!Дата_изменения = Date
        rs!Примечание = Me!New_Примечание
                
        rs.Update
        rs.Close
        Set rs = Nothing
        
        
        
    End If
    DoCmd.Close
    DoCmd.OpenForm "ИП"
    DoCmd.Requery
    
End Sub

Private Sub Отмена_Click()
    DoCmd.Close
    DoCmd.OpenForm "Все_ИП"
    DoCmd.Requery
End Sub

...
Рейтинг: 0 / 0
Сохранение изменений
    #39182061
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Акцесс устроен так, что при любой смене фокуса с текущей строки в форме на базе запроса изменения вносятся в базу. Поэтому решений для сохранения всего сразу только по кнопке не так много:

1. Использовать unbound поля, заполняя их кодом при открытии и затем кодом же разносить по таблице - самое муторное решение

2. Использовать временную таблицу для редактирования и переностить готовые данные в основную по кнопке - пожалуй, самое правильное решение

3. Сохранять копию данных перед началом редактировани и восстанавливать в случае отмены. Иногда это проще, чем №2, но не всегда логика приложения позволяет это сделать, если нужна транзакционная целостность.
...
Рейтинг: 0 / 0
Сохранение изменений
    #39182066
Sorb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

благодарю. Третий способ точно отметается, а первый эстетически будет выглядеть извращенно в коде легче уж 2 запроса сделать, чтобы делался запрос на копирование, а потом на удаление из временной таблицы.
...
Рейтинг: 0 / 0
Сохранение изменений
    #39182080
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinАкцесс устроен так, что при любой смене фокуса с текущей строки в форме на базе запроса изменения вносятся в базу. Поэтому решений для сохранения всего сразу только по кнопке не так много:

1. Использовать unbound поля, заполняя их кодом при открытии и затем кодом же разносить по таблице - самое муторное решение

2. Использовать временную таблицу для редактирования и переностить готовые данные в основную по кнопке - пожалуй, самое правильное решение

3. Сохранять копию данных перед началом редактировани и восстанавливать в случае отмены. Иногда это проще, чем №2, но не всегда логика приложения позволяет это сделать, если нужна транзакционная целостность.

4 Ну или использовать транзакции в рекордсет.
...
Рейтинг: 0 / 0
Сохранение изменений
    #39182091
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI4 Ну или использовать транзакции в рекордсет.

Да как-то мутно они работают с формами. Несколько раз пытался, вечно на какие-то грабли с видимостью изменений в других запростах натыкался. Сейчас транзакции стараюсь использовать только в сериях запросов в одном модуле.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сохранение изменений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]