Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912

Обновить данные в основной таблице

14.07.2014, 09:24. Показов 3293. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день..
Суть задачи, сохранять данные через временную таблицу..т.е есть форма ( на ней подчиненные формы, всё сделано через временные таблицы ), к одной из подчиненных форм подключена табл.ОплатаВременная..
когда пользователь заполнил форму данными и закрывает её, выскакивает сообщение сохранить: да , нет , отмена..
при нажатии Да, из временной таблицы Insert-тами все записывается в основную таблицу ( это я сделал )

Проблема у меня возникла, это когда пользователь открывает кукую либо запись ( опять же, все подтягивается Select-ами во временные таблицы ) и после редактирования этих данных всё должно сохраниться в основную таблицу.

Вот таким образом я пытаюсь перезаписать данные в основной таблице :
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
 Dim MyRstOplata As Recordset
 Dim s$
 Dim rstU As Recordset
 
 s = "select * from ОплатаВременная where Заказ=" & NomVSpiskeZak & ""
Set rstU = CurrentDb.OpenRecordset(s, dbOpenDynaset, dbSeeChanges)
    
Set MyRstOplata = CurrentDb.OpenRecordset("SELECT * FROM Оплата WHERE Заказ=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstU.EOF
  MyRstOplata.Edit
    MyRstOplata![Заказ] = rstU![Заказ]
    MyRstOplata![ДатаПП] = rstU![ДатаПП]
    MyRstOplata![Сумма] = rstU![Сумма]
    MyRstOplata![НомерПП] = rstU![НомерПП]
    MyRstOplata![Типоплаты] = rstU![Типоплаты]
    MyRstOplata![Статус] = rstU![Статус]
    MyRstOplata![СчетПодан] = rstU![СчетПодан]
    MyRstOplata![Подписан] = rstU![Подписан]
    MyRstOplata![Получены] = rstU![Получены]
    MyRstOplata![ДатаПередачиВЭД] = rstU![ДатаПередачиВЭД]
    MyRstOplata.Update
    rstU.MoveNext
Loop
но код все перезаписывает по последней записи, т.е смотрю в отладчике, 2 записи с разным набором данных, в переменных показывает записи для каждой, но в итоге получаются 2 одинаковые строки, соответствуют последней записи.
По идеи тут нужно уникальное поле использовать ( можно это: КодОплата, но не как не соображу как его прилепить к коду )
Подскажите пожалуйста как нужно подправить код, чтобы перезаписывались строки, каждая на своем месте..

На рисунке табл.ОплатаВременная,.. КодОплата - это уникальный номер в основной таблице Оплата
Миниатюры
Обновить данные в основной таблице  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2014, 09:24
Ответы с готовыми решениями:

Как обновить данные в таблице из формы
Есть форма «Pilga» На этой форме есть пять полей, с которых данные переносятся в таблицу «Fil» и далее используется для формирования...

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

По нажатию кнопки в форме обновить данные в таблице
В таблице есть поля "Код", "Название" и логическое поле "Скрыто". Форма построена на запросе, который кидает в форму только те записи, у...

7
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.07.2014, 09:46
Если правильно понял, то в редактируемом рекордсете надо найти запись, соответствующую коду оплаты в записи исходного рекордсета
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Do Until rstU.EOF
  MyRstOplata.Edit
  MyRstOplata.FindFirst "КодОплаты=" & rstU!КодОплаты
  If Not MyRstOplata.Nomatch Then
    MyRstOplata![Заказ] = rstU![Заказ]
    MyRstOplata![ДатаПП] = rstU![ДатаПП]
    MyRstOplata![Сумма] = rstU![Сумма]
    MyRstOplata![НомерПП] = rstU![НомерПП]
    MyRstOplata![Типоплаты] = rstU![Типоплаты]
    MyRstOplata![Статус] = rstU![Статус]
    MyRstOplata![СчетПодан] = rstU![СчетПодан]
    MyRstOplata![Подписан] = rstU![Подписан]
    MyRstOplata![Получены] = rstU![Получены]
    MyRstOplata![ДатаПередачиВЭД] = rstU![ДатаПередачиВЭД]
    MyRstOplata.Update
  Else
    'Здесь возможно надо что-то делать если искомая запись не найдена в редактируемом рекордсете
  End If
  rstU.MoveNext
Loop
2
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912
14.07.2014, 10:21  [ТС]
mobile, вот такую ошибку выдает на 13 строке

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
  Dim MyRstOplata As Recordset
 Dim s$
 Dim rstU As Recordset
 
 s = "select * from ОплатаВременная where Заказ=" & NomVSpiskeZak & ""
Set rstU = CurrentDb.OpenRecordset(s, dbOpenDynaset, dbSeeChanges)
    
Set MyRstOplata = CurrentDb.OpenRecordset("SELECT * FROM Оплата WHERE Заказ=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstU.EOF
  MyRstOplata.Edit
  MyRstOplata.FindFirst "Код=" & rstU!КодОплата
  If Not MyRstOplata.NoMatch Then
    MyRstOplata![Заказ] = rstU![Заказ]
    MyRstOplata![ДатаПП] = rstU![ДатаПП]
    MyRstOplata![Сумма] = rstU![Сумма]
    MyRstOplata![НомерПП] = rstU![НомерПП]
    MyRstOplata![Типоплаты] = rstU![Типоплаты]
    MyRstOplata![Статус] = rstU![Статус]
    MyRstOplata![СчетПодан] = rstU![СчетПодан]
    MyRstOplata![Подписан] = rstU![Подписан]
    MyRstOplata![Получены] = rstU![Получены]
    MyRstOplata![ДатаПередачиВЭД] = rstU![ДатаПередачиВЭД]
    MyRstOplata.Update
    Else
    
    End If
    rstU.MoveNext
Loop
Миниатюры
Обновить данные в основной таблице  
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.07.2014, 10:33
Лучший ответ Сообщение было отмечено duh_si как решение

Решение

Да, не обратил внимания, что Edit стоит раньше FindFirst. Это недопустимо, поскольку перемещение по записям снимает редактирование. Инструкцию MyRstOplata.Edit надо записать позже поиска
Visual Basic
1
2
3
  MyRstOplata.FindFirst "Код=" & rstU!КодОплата
  If Not MyRstOplata.NoMatch Then
   MyRstOplata.Edit
1
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912
14.07.2014, 10:50  [ТС]
mobile, спасибо огромное, все отлично
может при более тщательном тестирование, что-то и вылезет, ну а пока все как надо..

mobile подскажите пожалуйста еще в таком вопросе, так как вы более опытны,
Просто меня гложут сомнения, правильно ли я делаю эту часть задачи от общей.
Если рассмотреть такую ситуацию ( а она будет обязательно )

Допустим пользователь открывает Заказ для редактирования, отредактировал что-то, но взял и еще добавил одну позицию товара в этот заказ, т.е получиться что код с ошибкой сработает, записи которые уже были, он перезапишет, а вот на новую выдаст ошибку, т.к в основной таблице этой записи еще нет, как мне выйти из такой ситуации?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
14.07.2014, 10:58
Цитата Сообщение от duh_si Посмотреть сообщение
Допустим пользователь открывает Заказ для редактирования, отредактировал что-то, но взял и еще добавил одну позицию товара в этот заказ, т.е получиться что код с ошибкой сработает, записи которые уже были, он перезапишет, а вот на новую выдаст ошибку, т.к в основной таблице этой записи еще нет, как мне выйти из такой ситуации?
Безусловно, совершенно недопустимо. Вносить новую запись надо там где для этого созданы условия. Видимо, у Вас есть форма, где вносятся новые записи. Но не во временной таблице, для этого не предназначенной.
Я бы в форме задал свойство AllowAdditions (Разрешить добавление) равным False. Тогда редактировать существующие записи можно, а добавлять новые нельзя.
1
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
15.07.2014, 06:42
duh_si, считаю, что все операции (обновление, добавление и удаление записей) можно сделать во временной таблице.
Ниже приведен код синхронизации основной таблицы.
Так как многие детали не были освещены, то предполагаю, что:
- во временной таблице содержаться сведения только по одному заказу;
- коррекция полей КодОплата и Заказ в форме с временной таблицей запрещена;
- при добавлении новой записи поле КодОплата пусто (Null);
- поля Код в основной и временной таблице - ключевые.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim db As DAO.Database, sq&
  Set db = CurrentDb
  sq = "UPDATE Оплата As P INNER JOIN ОплатаВременная As V ON P.Код = V.КодОплата " & _
      "SET P.ДатаПП = V.ДатаПП, P.Сумма=V.Сумма, P.НомерПП=V.НомерПП, " & _
      "P.Типоплаты = V.Типоплаты, P.Статус = V.Статус, P.СчетПодан = V.СчетПодан, " & _
      "P.Подписан = V.Подписан, P.Получены = V.Получены, " & _
      "P.ДатаПередачиВЭД = V.ДатаПередачиВЭД"
  db.Execute sq
  sq = "DELETE * FROM Оплата " & _
       "WHERE Код In (SELECT P.Код FROM Оплата AS P LEFT JOIN ОплатаВременная AS V " & _
       "ON P.Код=V.КодОплата WHERE P.Заказ=" & NomVSpiskeZak & " And V.Код Is Null)"
  db.Execute sq
  sq = "INSERT INTO Оплата (Заказ, ДатаПП, Сумма, НомерПП, Типоплаты, Статус, " & _
       "СчетПодан, Подписан, Получены, ДатаПередачиВЭД) " & _
       "SELECT " & NomVSpiskeZak & ", ДатаПП, Сумма, НомерПП, Типоплаты, Статус, " & _
       "СчетПодан, Подписан, Получены, ДатаПередачиВЭД " & _
       "FROM ОплатаВременная WHERE КодОплата Is Null"
  db.Execute sq
  Set db = Nothing
За неимением Вашей БД, код не тестировал.
1
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912
15.07.2014, 10:48  [ТС]
minob, Так как многие детали не были освещены
попробую описать , как у меня все устроено.
- во временной таблице содержаться сведения только по одному заказу;
всего у меня 4 таблицы и для них же 4 временные. Есть форма к ней подключена временная таблица ВременноеСохранениеЗаказа ( может храниться только одна запись по конкретному заказу ), на этой форме есть 3 подчиненные тоже на основе временных таблиц ( могут храниться от 1 до n записей по данному заказу )
- коррекция полей КодОплата и Заказ в форме с временной таблицей запрещена;
все верно. Единственное по поводу КодОплата
табл.ОплатаВременная
Код
КодОплата
ДатаПП
Сумма
и.тд

табл.Оплата
Код
ДатаПП
Сумма
и.тд
в таблице ОплатаВременная в поле КодОплата храниться Код из табл. Оплата
сделано для того, чтобы при обновлении, перезаписывались не все подряд записи, а соответствующие своему номеру
как помог mobile выше
Visual Basic
1
2
3
 MyRstOplata.FindFirst "Код=" & rstU!КодОплата
  If Not MyRstOplata.NoMatch Then
   MyRstOplata.Edit
- при добавлении новой записи поле КодОплата пусто (Null);
Вообще как это все выглядит: Есть ленточная форма в которой все заказы, кнопки: создать, показать.
При нажатии Создать...открывается форма... когда пользователь заполнит данными и подтвердит в сообщение "Да" сработает вот эта функция
Кликните здесь для просмотра всего текста
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
45
46
Private Function SaveRecord()
 CurrentProject.Connection.Execute "INSERT INTO Çàêàç (Äàòà, Ïîñòàâùèê, Ñòàòóñ, Íà÷àëîÏðîèçâîäñòâà, " _
       & "Îêîí÷àíèåÏðîèçâîäñòâà, Íà÷àëîÄîñòàâêè, Îêîí÷àíèåÄîñòàâêè, Ïðîåêò, Ïîäïðîåêò, Íà÷àëîÏðîèçâîäñòâàÏëàí, " _
       & "Îêîí÷àíèåÏðîèçâîäñòâàÏëàí, Íà÷àëîÄîñòàâêèÏëàí, Îêîí÷àíèåÄîñòàâêèÏëàí, ÍîìåðÑ÷åòà, ÄàòàÑ÷åòåà, ÑòàòóñÏÔ, " _
       & "ÑòàòóñÎáðàçåö, ÑòàòóñÎïëàò, ÍîìåðÇàêàçàÓïîñòàâùèêà, LeadMan, ÏîäòâÏðîèç, ÏîäòâÎêîí÷, ÏîäòâåðæÇàãð, " _
       & "ÏîäòâåðæäÄîñò, OrderMan, ÍîìåðÂýä, ÏåðåäàíÂýä, ÑïîñîáÄîñòàâêè, ÏðîåêòÀðîì, Îñíîâíîé, Ñðî÷íî, ÑëóæåáêàÍîìåð, " _
       & "ÑëóæåáêàÄàòà, Ñðîê, Êà÷åñòâî, Öåíà) " _
          & "SELECT Äàòà, Ïîñòàâùèê, Ñòàòóñ, Íà÷àëîÏðîèçâîäñòâà, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâà, Íà÷àëîÄîñòàâêè, Îêîí÷àíèåÄîñòàâêè, Ïðîåêò, Ïîäïðîåêò, Íà÷àëîÏðîèçâîäñòâàÏëàí, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâàÏëàí, Íà÷àëîÄîñòàâêèÏëàí, Îêîí÷àíèåÄîñòàâêèÏëàí, ÍîìåðÑ÷åòà, ÄàòàÑ÷åòåà, ÑòàòóñÏÔ, " _
          & "ÑòàòóñÎáðàçåö, ÑòàòóñÎïëàò, ÍîìåðÇàêàçàÓïîñòàâùèêà, LeadMan, ÏîäòâÏðîèç, ÏîäòâÎêîí÷, ÏîäòâåðæäÇàãð, " _
          & "ÏîäòâåðæäÄîñò, OrderMan, ÍîìåðÂýä, ÏåðåäàíÂýä, ÑïîñîáÄîñòàâêè, ÏðîåêòÀðîì, Îñíîâíîé, Ñðî÷íî, ÑëóæåáêàÍîìåð, " _
          & "ÑëóæåáêàÄàòà, Ñðîê, Êà÷åñòâî, Öåíà " _
          & "FROM ÂðåìåííîåÑîõðàíåíèåÇàêàçà WHERE Çàêàç =" & MaxNozZakaza
          
  CurrentProject.Connection.Execute "INSERT INTO ÂÇàêàçå (Çàêàç, Ïðîäóêò, Êîëè÷åñòâî, ÖåíàÇàØò, " _
       & "ÒèïÖåíû, Äîïîëíèòåëüíî, Ï1, Ï2, Ï3, Ï4, Ï5, Ï6) " _
          & "SELECT Çàêàç, Ïðîäóêò, Êîëè÷åñòâî, ÖåíàÇàØò, " _
          & "ÒèïÖåíû, Äîïîëíèòåëüíî, Ï1, Ï2, Ï3, Ï4, Ï5, Ï6 " _
          & "FROM ÂÇàêàçåÂðåìåííàÿ WHERE Çàêàç =" & MaxNozZakaza
          
  CurrentProject.Connection.Execute "INSERT INTO ÑïèñîêÏîñòàâîê (Çàêàç, Ïîñòàâêà, ÑïîñîáÄîñòàâêè, ÄàòàÍà÷Äîñò, " _
       & "ÏîäòÍà÷Äîñò, ÄàòàÎêîíÄîñò, ÏîäòÎêîíÄîñò) " _
          & "SELECT Çàêàç, Ïîñòàâêà, ÑïîñîáÄîñòàâêè, ÄàòàÍà÷Äîñò, " _
          & "ÏîäòÍà÷Äîñò, ÄàòàÎêîíÄîñò, ÏîäòÎêîíÄîñò  " _
          & "FROM ÑïèñîêÏîñòàâîêÂðåìåííàÿ WHERE Çàêàç =" & MaxNozZakaza
          
  CurrentProject.Connection.Execute "INSERT INTO Ïðèåìêà (Çàêàç, ÄàòàÏðèåìêè, Ó÷àñòíèê, ÐåçóëüòàòÏðîâåðêè, " _
       & "Ïðèíÿòî_, Ïîñòàâêà) " _
          & "SELECT Çàêàç, ÄàòàÏðèåìêè, Ó÷àñòíèê, ÐåçóëüòàòÏðîâåðêè, " _
          & "Ïðèíÿòî_, Ïîñòàâêà " _
          & "FROM ÏðèåìêàÂðåìåííàÿ WHERE Çàêàç =" & MaxNozZakaza
          
  CurrentProject.Connection.Execute "INSERT INTO Îïëàòà (Çàêàç, ÄàòàÏÏ, Ñóììà, ÍîìåðÏÏ, " _
       & "ÒèïÎïëàòû, Ñòàòóñ, Ñ÷åòÏîäàí, Ïîäïèñàí, Ïîëó÷åíû, ÄàòàÏåðåäà÷èÂÝÄ) " _
          & "SELECT Çàêàç, ÄàòàÏÏ, Ñóììà, ÍîìåðÏÏ, ÒèïÎïëàòû, Ñòàòóñ, Ñ÷åòÏîäàí, " _
          & "Ïîäïèñàí, Ïîëó÷åíû, ÄàòàÏåðåäà÷èÂÝÄ " _
          & "FROM ÎïëàòàÂðåìåííàÿ WHERE Çàêàç =" & MaxNozZakaza
          
CurrentProject.Connection.Execute "DELETE * From ÂðåìåííîåÑîõðàíåíèåÇàêàçà WHERE Çàêàç = " & MaxNozZakaza
CurrentProject.Connection.Execute "DELETE * From ÂÇàêàçåÂðåìåííàÿ WHERE Çàêàç = " & MaxNozZakaza
CurrentProject.Connection.Execute "DELETE * From ÑïèñîêÏîñòàâîêÂðåìåííàÿ WHERE Çàêàç = " & MaxNozZakaza
CurrentProject.Connection.Execute "DELETE * From ÏðèåìêàÂðåìåííàÿ WHERE Çàêàç = " & MaxNozZakaza
CurrentProject.Connection.Execute "DELETE * From ÎïëàòàÂðåìåííàÿ WHERE Çàêàç = " & MaxNozZakaza
 
End Function

Кнопка Показать:
Кликните здесь для просмотра всего текста
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
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
Private Function UpdateRecord()
Dim StrVr As Recordset
 
Set StrVr = CurrentDb.OpenRecordset("SELECT Äàòà, Ïîñòàâùèê, Ñòàòóñ, Íà÷àëîÏðîèçâîäñòâà, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâà, Íà÷àëîÄîñòàâêè, Îêîí÷àíèåÄîñòàâêè, Ïðîåêò, Ïîäïðîåêò, Íà÷àëîÏðîèçâîäñòâàÏëàí, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâàÏëàí, Íà÷àëîÄîñòàâêèÏëàí, Îêîí÷àíèåÄîñòàâêèÏëàí, ÍîìåðÑ÷åòà, ÄàòàÑ÷åòåà, ÑòàòóñÏÔ, " _
          & "ÑòàòóñÎáðàçåö, ÑòàòóñÎïëàò, ÍîìåðÇàêàçàÓïîñòàâùèêà, LeadMan, ÏîäòâÏðîèç, ÏîäòâÎêîí÷, ÏîäòâåðæäÇàãð, " _
          & "ÏîäòâåðæäÄîñò, OrderMan, ÍîìåðÂýä, ÏåðåäàíÂýä, ÑïîñîáÄîñòàâêè, ÏðîåêòÀðîì, Îñíîâíîé, Ñðî÷íî, ÑëóæåáêàÍîìåð, " _
          & "ÑëóæåáêàÄàòà, Ñðîê, Êà÷åñòâî, Öåíà " _
          & "FROM ÂðåìåííîåÑîõðàíåíèåÇàêàçà WHERE Çàêàç =" & NomVSpiskeZak)
          
    DateVr = Format(StrVr![Äàòà], "dd.mm.yyyy")
    PostVr = StrVr![Ïîñòàâùèê]
    StatusVr = StrVr![Ñòàòóñ]
    NachProizVr = Format(StrVr![Íà÷àëîïðîèçâîäñòâà], "dd.mm.yyyy")
    
    OkonProizVr = Format(StrVr![Îêîí÷àíèåÏðîèçâîäñòâà], "dd.mm.yyyy")
    NachDostVr = Format(StrVr![Íà÷àëîÄîñòàâêè], "dd.mm.yyyy")
    OkonDostVr = Format(StrVr![Îêîí÷àíèåÄîñòàâêè], "dd.mm.yyyy")
    ProjeVr = StrVr![Ïðîåêò]
    PodProjeVr = StrVr![Ïîäïðîåêò]
    NachProizPlanVr = Format(StrVr![Íà÷àëîÏðîèçâîäñòâàÏëàí], "dd.mm.yyyy")
    
    OkonProizPlanVr = Format(StrVr![Îêîí÷àíèåÏðîèçâîäñòâàÏëàí], "dd.mm.yyyy")
    NachDostPlanVr = Format(StrVr![Íà÷àëîÄîñòàâêèÏëàí], "dd.mm.yyyy")
    OkonDostPlanVr = Format(StrVr![Îêîí÷àíèåÄîñòàâêèÏëàí], "dd.mm.yyyy")
    NomSchetaVr = StrVr![ÍîìåðÑ÷åòà]
    DateSchetaVr = Format(StrVr![ÄàòàÑ÷åòåà], "dd.mm.yyyy")
    StatusPFVr = StrVr![ÑòàòóñÏÔ]
    
    StatusObrazecVr = StrVr![ÑòàòóñÎáðàçåö]
    StatusOplatVr = StrVr![ÑòàòóñÎïëàò]
    NomZakUPostVr = StrVr![ÍîìåðÇàêàçàÓïîñòàâùèêà]
    NLeadManVr = StrVr![LeadMan]
    PodtvProizVr = StrVr![ÏîäòâÏðîèç]
    PodtvOkonchVr = StrVr![ÏîäòâÎêîí÷]
    PodtvZagrVr = StrVr![ÏîäòâåðæäÇàãð]
    
    PodtvDostVr = StrVr![ÏîäòâåðæäÄîñò]
    OrderManVr = StrVr![OrderMan]
    NVedVr = StrVr![ÍîìåðÂÝÄ]
    PeredVedVr = StrVr![ÏåðåäàíÂÝÄ]
    SposobDostVr = StrVr![ÑïîñîáÄîñòàâêè]
    ProjeAromVr = StrVr![ÏðîåêòÀðîì]
    OsnovnoyVr = StrVr![Îñíîâíîé]
    SrochnoVr = StrVr![Ñðî÷íî]
    SlugebkaNomVr = StrVr![ÑëóæåáêàÍîìåð]
    
    SlugebkaDateVr = Format(StrVr![ÑëóæåáêàÄàòà], "dd.mm.yyyy")
    SrokVr = StrVr![Ñðîê]
    KachestvoVr = StrVr![Êà÷åñòâî]
    CenaVr = StrVr![Öåíà]
    
CurrentProject.Connection.Execute "UPDATE Çàêàç SET [Äàòà] = '" & DateVr & "', [Ïîñòàâùèê] = '" & Nz(PostVr, "NULL") & "', [Ñòàòóñ]='" & Nz(StatusVr, "NULL") & "', " _
& "[Íà÷àëîÏðîèçâîäñòâà]='" & NachProizVr & "', [Îêîí÷àíèåÏðîèçâîäñòâà]='" & OkonProizVr & "', [Íà÷àëîÄîñòàâêè]='" & NachDostVr & "', " _
   & "[Îêîí÷àíèåÄîñòàâêè]='" & OkonDostVr & "', " _
   & "[Íà÷àëîÏðîèçâîäñòâàÏëàí]='" & NachProizPlanVr & "', " _
   & "[Îêîí÷àíèåÏðîèçâîäñòâàÏëàí]='" & OkonProizPlanVr & "', [Íà÷àëîÄîñòàâêèÏëàí]='" & NachDostPlanVr & "', " _
   & "[Îêîí÷àíèåÄîñòàâêèÏëàí]='" & OkonDostPlanVr & "' " _
      & "WHERE Íîìåð =" & NomVSpiskeZak & ""
 
'         & "[ÄàòàÑ÷åòåà]='" & DateSchetaVr & "', [ÑòàòóñÏÔ]='" & StatusPFVr & "' " _
'   & "[ÑòàòóñÎáðàçåö]='" & StatusObrazecVr & "', [ÑòàòóñÎïëàò]='" & StatusOplatVr & "', " _
'   & "[ÍîìåðÇàêàçàÓïîñòàâùèêà]=" & Nz(NomZakUPostVr, "NULL") & ", [LeadMan]='" & NLeadManVr & "', " _
'   & "[ÏîäòâÏðîèç]=" & PodtvProizVr & ", [ÏîäòâÎêîí÷]=" & PodtvOkonchVr & ", " _
'   & "[ÏîäòâåðæÇàãð]=" & PodtvZagrVr & ", [ÏîäòâåðæäÄîñò]=" & PodtvDostVr & ", " _
'   & "[OrderMan]=" & Nz(OrderManVr, "NULL") & ", [ÍîìåðÂÝÄ]='" & NVedVr & "', " _
'   & "[ÏåðåäàíÂÝÄ]=" & PeredVedVr & ", [ÑïîñîáÄîñòàâêè]=" & Nz(SposobDostVr, "NULL") & ", " _
'   & "[ÏðîåêòÀðîì]=" & Nz(ProjeAromVr, "NULL") & ", [Îñíîâíîé]=" & OsnovnoyVr & ", " _
'   & "[Ñðî÷íî]=" & SrochnoVr & ", [ÑëóæåáêàÍîìåð]='" & SlugebkaNomVr & "', " _
'   & "[ÑëóæåáêàÄàòà]='" & SlugebkaDateVr & "', [Ñðîê]=" & Nz(SrokVr, "NULL") & ",  " _
'   & "[Êà÷åñòâî]=" & Nz(KachestvoVr, "NULL") & ", [Öåíà]=" & Nz(CenaVr, "NULL") & " " _
 
 
''''''''ÂÇàêàçå'''''''''''''
 Dim StrVzakazeVr As Recordset
 Dim strVz$
 Dim rstVz As Recordset
 
strVz = "select * from ÂÇàêàçåÂðåìåííàÿ where Çàêàç=" & NomVSpiskeZak & ""
Set rstVz = CurrentDb.OpenRecordset(strVz, dbOpenDynaset, dbSeeChanges)
    
Set StrVzakazeVr = CurrentDb.OpenRecordset("SELECT * FROM ÂÇàêàçå WHERE Çàêàç=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstVz.EOF
    StrVzakazeVr.FindFirst "Êîä=" & rstVz!ÊîäÂÇàêàçå
  If Not StrVzakazeVr.NoMatch Then
    StrVzakazeVr.Edit
    StrVzakazeVr![Çàêàç] = rstVz![Çàêàç]
    StrVzakazeVr![Ïðîäóêò] = rstVz![Ïðîäóêò]
    StrVzakazeVr![Êîëè÷åñòâî] = rstVz![Êîëè÷åñòâî]
    StrVzakazeVr![Öåíàçàøò] = rstVz![Öåíàçàøò]
    StrVzakazeVr![Òèïöåíû] = rstVz![Òèïöåíû]
    StrVzakazeVr![Äîïîëíèòåëüíî] = rstVz![Äîïîëíèòåëüíî]
    StrVzakazeVr![Ï1] = rstVz![Ï1]
    StrVzakazeVr![Ï2] = rstVz![Ï2]
    StrVzakazeVr![Ï3] = rstVz![Ï3]
    StrVzakazeVr![Ï4] = rstVz![Ï4]
    StrVzakazeVr![Ï5] = rstVz![Ï5]
    StrVzakazeVr![Ï6] = rstVz![Ï6]
    StrVzakazeVr.Update
    Else
    
    End If
    rstVz.MoveNext
Loop
    
 ''''''''''''ÑïèñîêÏîñòàâîê''''''''''''''''''''
Dim StrPostavkyVr As Recordset
 Dim strPostVz$
 Dim rstPostVz As Recordset
 
strPostVz = "select * from ÑïèñîêÏîñòàâîêÂðåìåííàÿ where Çàêàç=" & NomVSpiskeZak & ""
Set rstPostVz = CurrentDb.OpenRecordset(strPostVz, dbOpenDynaset, dbSeeChanges)
 
Set StrPostavkyVr = CurrentDb.OpenRecordset("SELECT * FROM ÑïèñîêÏîñòàâîê WHERE Çàêàç=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstPostVz.EOF
    StrPostavkyVr.FindFirst "Êîä=" & rstPostVz!ÊîäÏîñòàâîê
  If Not StrPostavkyVr.NoMatch Then
    StrPostavkyVr.Edit
    StrPostavkyVr![Çàêàç] = rstPostVz![Çàêàç]
    StrPostavkyVr![ÑïîñîáÄîñòàâêè] = rstPostVz![ÑïîñîáÄîñòàâêè]
    StrPostavkyVr![ÄàòàÍà÷Äîñò] = rstPostVz![ÄàòàÍà÷Äîñò]
    StrPostavkyVr![ÏîäòÍà÷Äîñò] = rstPostVz![ÏîäòÍà÷Äîñò]
    StrPostavkyVr![ÄàòàÎêîíÄîñò] = rstPostVz![ÄàòàÎêîíÄîñò]
    StrPostavkyVr![ÏîäòÎêîíÄîñò] = rstPostVz![ÏîäòÎêîíÄîñò]
    StrPostavkyVr![Ïîñòàâêà] = rstPostVz![Ïîñòàâêà]
    StrPostavkyVr.Update
    Else
 
    End If
    rstPostVz.MoveNext
Loop
    
  ''''''''''''Ïðèåìêà''''''''''''''''''''
Dim StrPriemkaVr As Recordset
 Dim strPrieVz$
 Dim rstPrieVz As Recordset
 
strPrieVz = "select * from ÏðèåìêàÂðåìåííàÿ where Çàêàç=" & NomVSpiskeZak & ""
Set rstPrieVz = CurrentDb.OpenRecordset(strPrieVz, dbOpenDynaset, dbSeeChanges)
    
Set StrPriemkaVr = CurrentDb.OpenRecordset("SELECT * FROM Ïðèåìêà WHERE Çàêàç=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstPrieVz.EOF
    StrPriemkaVr.FindFirst "Êîä=" & rstPrieVz!ÊîäÏðèåìêà
  If Not StrPriemkaVr.NoMatch Then
    StrPriemkaVr.Edit
    StrPriemkaVr![Çàêàç] = rstPrieVz![Çàêàç]
    StrPriemkaVr![ÄàòàÏðèåìêè] = rstPrieVz![ÄàòàÏðèåìêè]
    StrPriemkaVr![Ó÷àñòíèê] = rstPrieVz![Ó÷àñòíèê]
    StrPriemkaVr![ÐåçóëüòàòÏðîâåðêè] = rstPrieVz![ÐåçóëüòàòÏðîâåðêè]
    StrPriemkaVr![Ïðèíÿòî_] = rstPrieVz![Ïðèíÿòî_]
    StrPriemkaVr![Ïîñòàâêà] = rstPrieVz![Ïîñòàâêà]
    StrPriemkaVr.Update
    Else
    
    End If
    rstPrieVz.MoveNext
Loop
    
'''''''''''''''''''Îïëàòà'''''''''''''''''
 Dim MyRstOplata As Recordset
 Dim s$
 Dim rstOpl As Recordset
 
s = "select * from ÎïëàòàÂðåìåííàÿ where Çàêàç=" & NomVSpiskeZak & ""
Set rstOpl = CurrentDb.OpenRecordset(s, dbOpenDynaset, dbSeeChanges)
 
Set MyRstOplata = CurrentDb.OpenRecordset("SELECT * FROM Îïëàòà WHERE Çàêàç=" & NomVSpiskeZak, dbOpenDynaset, dbSeeChanges)
Do Until rstOpl.EOF
    MyRstOplata.FindFirst "Êîä=" & rstOpl!ÊîäÎïëàòà
  If Not MyRstOplata.NoMatch Then
    MyRstOplata.Edit
    MyRstOplata![Çàêàç] = rstOpl![Çàêàç]
    MyRstOplata![ÄàòàÏÏ] = rstOpl![ÄàòàÏÏ]
    MyRstOplata![Ñóììà] = rstOpl![Ñóììà]
    MyRstOplata![ÍîìåðÏÏ] = rstOpl![ÍîìåðÏÏ]
    MyRstOplata![Òèïîïëàòû] = rstOpl![Òèïîïëàòû]
    MyRstOplata![Ñòàòóñ] = rstOpl![Ñòàòóñ]
    MyRstOplata![Ñ÷åòÏîäàí] = rstOpl![Ñ÷åòÏîäàí]
    MyRstOplata![Ïîäïèñàí] = rstOpl![Ïîäïèñàí]
    MyRstOplata![Ïîëó÷åíû] = rstOpl![Ïîëó÷åíû]
    MyRstOplata![ÄàòàÏåðåäà÷èÂÝÄ] = rstOpl![ÄàòàÏåðåäà÷èÂÝÄ]
    MyRstOplata.Update
    Else
 
    End If
    rstOpl.MoveNext
Loop
'''''''''''''''''''''''''''''''''''''''''''''''''''
 
CurrentProject.Connection.Execute "DELETE * From ÂðåìåííîåÑîõðàíåíèåÇàêàçà WHERE Çàêàç = " & NomVSpiskeZak
CurrentProject.Connection.Execute "DELETE * From ÂÇàêàçåÂðåìåííàÿ WHERE Çàêàç = " & NomVSpiskeZak
CurrentProject.Connection.Execute "DELETE * From ÑïèñîêÏîñòàâîêÂðåìåííàÿ WHERE Çàêàç = " & NomVSpiskeZak
CurrentProject.Connection.Execute "DELETE * From ÏðèåìêàÂðåìåííàÿ WHERE Çàêàç = " & NomVSpiskeZak
CurrentProject.Connection.Execute "DELETE * From ÎïëàòàÂðåìåííàÿ WHERE Çàêàç = " & NomVSpiskeZak
        
End Function

вот если не добавлять новых записей в оплату, приему и т.д, а только редактировать, тогда код отработает как надо,
Но периодически возникает необходимость еще что-то добавить, например забыл изначально добавить еще одну позицию товара в заказ

Просто не особо хочется, что-то еще мудрить, а оставить как сейчас есть, просто сделать возможность и редактировать что уже есть и добавлять новую позицию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2014, 10:48
Помогаю со студенческими работами здесь

Обновить данные в таблице: Цена после уценки
Есть таблица "Товар", она содержит поля: --Код товара --Название --Цена Также есть таблица "Состав акта уценки", в...

Обновить данные в таблице excel на основе даннх из Access
Уважаемые форумчане. Помогите пожалуйста решить следующую проблему. Есть база данных аксес. В базе используется связанная...

Обновить данные в таблице Access на основе данных из Excel
Добрый день, подскажите, пожалуйста, как решить задачу: Есть книга Excel "C:\Data\Новые сотрудники.xls". В этой книге есть лист...

Подменить значения в основной таблице на исключения
Добрый день. Есть основная таблица Вин номер - модель - цвет - год выпуска цвет имеет 3 значения - стандартный, перламутр,...

После ввода данных на форму обновить поля в другой таблице
Здравствуйте. Помогите решить задачу: после ввода данных в форму Учет поступлений на склад (для ввода данных в таблицу Накладная на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru