Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сохранение изменений / 6 сообщений из 6, страница 1 из 1
01.03.2016, 06:40
    #39182051
Sorb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений
Приветствую всех. В Access только начинаю, но уже возникла такая проблема: имеется форма для редактирования записей. При открытии формы(так как граф много) делается запрос и заполняются поля, дабы пользователю все данные не пришлось вновь вносить. Вот только возникла одна проблема: как только заполняется любое поле-сразу же вносятся изменения в бд. Как возможно сделать так, чтобы изменения вносились сразу пачкой и только по нажатию кнопки?
...
Рейтинг: 0 / 0
01.03.2016, 07:06
    #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
01.03.2016, 07:58
    #39182061
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение изменений
Акцесс устроен так, что при любой смене фокуса с текущей строки в форме на базе запроса изменения вносятся в базу. Поэтому решений для сохранения всего сразу только по кнопке не так много:

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

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

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

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

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

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

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

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

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


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