Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Конфликт записи - как решить / 21 сообщений из 21, страница 1 из 1
11.08.2004, 09:21:40
    #32643787
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Всем доброе время суток!
При прекращении права собственности на объект пользователь ставит галочку в форме. На одном свидетельстве регистрации права сидит несколько объектов. Я программно с помощью запроса Update заменяю данные во всех объектах согласно изменений в форме.

Код: plaintext
1.
2.
3.
4.
If MsgBox("Распространить изменение статуса на все объекты с данным номером свидетельства???", vbYesNo, "Распространить?") = vbYes Then
                SQL_str = "UPDATE [Table] SET [Table].Precr_Prava_Sobstv = False WHERE (((Table.NumSvidet)=" & Me.NumSvidet.Value & "));"
                DoCmd.RunSQL SQL_str
            End If

После этого если перейти на следующий объект с данным свидетельством возникает конфликт записи и выходит диалог см. картинку-аттачмент.

Как быть? В принципе можно научить юзьверей жать "Сохранить", но это кустарщина какая-то...
...
Рейтинг: 0 / 0
11.08.2004, 09:58:34
    #32643855
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
после UPDATE сделай me.refresh
...
Рейтинг: 0 / 0
11.08.2004, 12:55:15
    #32644391
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
щас попробую...
...
Рейтинг: 0 / 0
11.08.2004, 12:58:05
    #32644403
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Теперь сразу вылетает этот диалог :)
Что-то другое надо. А может как-то можно запускать выполнение Update-запроса от имени текущего пользователя и тогда конфликта не будет...
Почему пишет что запись изменялась другим пользователем?
...
Рейтинг: 0 / 0
11.08.2004, 13:43:32
    #32644537
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
покажи весь код и конкретно строчку где вылетает

у меня в адп /хп было такое, рефреш помог, а у тебя мдб однако...
...
Рейтинг: 0 / 0
11.08.2004, 13:44:23
    #32644539
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Неужели никто не знает, как выключить этот глюк?
...
Рейтинг: 0 / 0
11.08.2004, 13:46:19
    #32644545
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
код показывай , телепаты в отпуске
...
Рейтинг: 0 / 0
11.08.2004, 13:46:48
    #32644546
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Русские буквы кстати почему-то из VBA никак не хоЧУт перекачиваться ни в ворд ни куда-либо ещё... может это знаете как исправить?
Вот весь код, который меняет данные согласно выбора пользователей
Как видно, уже рефреш добавлен
Код: plaintext
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.
Private Sub Precr_Prava_Sobstv_BeforeUpdate(Cancel As Integer)
If Me.Precr_Prava_Sobstv.Value = True Then
        On Error GoTo Err_btn_OpenPrecrPrava_Click
    
        Dim stDocName As String
        Dim stLinkCriteria As String
        
        If MsgBox("Ðàñïðîñòðàíèòü èçìåíåíèå ñòàòóñà íà âñå îáúåêòû ñ äàííûì íîìåðîì ñâèäåòåëüñòâà???", vbYesNo, "Ðàñïðîñòðàíèòü?") = vbYes Then
            SQL_str = "UPDATE [Table] SET [Table].Precr_Prava_Sobstv = True WHERE (((Table.NumSvidet)=" & Me.NumSvidet.Value & "));"
            DoCmd.RunSQL SQL_str
            Me.Refresh
        End If
        
        stDocName = ChrW( 1055 ) & ChrW( 1088 ) & ChrW( 1077 ) & ChrW( 1082 ) & ChrW( 1088 ) & ChrW( 1072 ) & ChrW( 1097 ) & ChrW( 1077 ) & ChrW( 1085 ) & ChrW( 1080 ) & ChrW( 1077 ) & ChrW( 95 ) & ChrW( 1087 ) & ChrW( 1088 ) & ChrW( 1072 ) & ChrW( 1074 ) & ChrW( 1072 )
        
        stLinkCriteria = "[NumSvidet]=" & Me![NumSvidet]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    
Exit_btn_OpenPrecrPrava_Click:
        Exit Sub
    
Err_btn_OpenPrecrPrava_Click:
        MsgBox Err.Description
        Resume Exit_btn_OpenPrecrPrava_Click
    Else
    If MsgBox(" òàáëèöå ïðåêðàùåíèÿ ïðàâà ñîáñòâåííîñòè ñîäåðæèòñÿ èíôîðìàöèÿ îá ýòîì îáúåêòå!" & vbCr & "Òî÷íî æåëàåòå óäàëèòü îòìåòêó???", vbYesNo, "Âîïðîñ") = vbNo Then
        Cancel = - 1 
        
        If MsgBox("Îòêðûòü òàáëèöó ïðåêðàùåíèÿ ïðàâà äëÿ ïðîñìîòðà äàííûõ ïî òåêóùåìó îáúåêòó???", vbYesNo, "Îòêðûòü òàáëèöó?") = vbYes Then
            stDocName = ChrW( 1055 ) & ChrW( 1088 ) & ChrW( 1077 ) & ChrW( 1082 ) & ChrW( 1088 ) & ChrW( 1072 ) & ChrW( 1097 ) & ChrW( 1077 ) & ChrW( 1085 ) & ChrW( 1080 ) & ChrW( 1077 ) & ChrW( 95 ) & ChrW( 1087 ) & ChrW( 1088 ) & ChrW( 1072 ) & ChrW( 1074 ) & ChrW( 1072 )
            stLinkCriteria = "[NumSvidet]=" & Me![NumSvidet]
            DoCmd.OpenForm stDocName, , , stLinkCriteria
        End If
    Else
            If MsgBox("Ðàñïðîñòðàíèòü èçìåíåíèå ñòàòóñà íà âñå îáúåêòû ñ äàííûì íîìåðîì ñâèäåòåëüñòâà???", vbYesNo, "Ðàñïðîñòðàíèòü?") = vbYes Then
                SQL_str = "UPDATE [Table] SET [Table].Precr_Prava_Sobstv = False WHERE (((Table.NumSvidet)=" & Me.NumSvidet.Value & "));"
                DoCmd.RunSQL SQL_str
                Me.Refresh
            End If

    End If
End If
End Sub


...
Рейтинг: 0 / 0
11.08.2004, 13:47:26
    #32644549
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
На чём висит форма? Небоcь на таблице [table] ?
...
Рейтинг: 0 / 0
11.08.2004, 13:47:57
    #32644551
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Понятно дело на таблице
...
Рейтинг: 0 / 0
11.08.2004, 13:50:31
    #32644558
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Дал код
Эй телеТЯпы!!!!!!! аууууууууууууу :)
...
Рейтинг: 0 / 0
11.08.2004, 13:54:38
    #32644573
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
попробуй повесить не на Precr_Prava_Sobstv_BeforeUpdate, а на афтерапдейт , потом таки рефреш, а если
If MsgBox(" тратата") = vbNo
делай Undo
...
Рейтинг: 0 / 0
11.08.2004, 13:57:48
    #32644582
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
или на after update формы, предварительно флажок взведя
...
Рейтинг: 0 / 0
11.08.2004, 14:29:23
    #32644678
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Открывай форму и данные только на чтение.
...
Рейтинг: 0 / 0
11.08.2004, 14:32:57
    #32644697
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
интересно, как же он тогда флажок выставлять на форме будет, да и откуда Вы взяли что нужно запретить редактировать всю форму?
...
Рейтинг: 0 / 0
11.08.2004, 14:50:54
    #32644756
GuestN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Это из-за того, что запрос обновляет и ту запись, которую пользователь исправил ручками, если ее не обновлять в запросе то проблемы не будет.
т.е что-то типа:
SQL_str = "... WHERE (((Table.NumSvidet)=" & Me.NumSvidet.Value & " and (Table.id <> " & me.id & ")));"
...
Рейтинг: 0 / 0
11.08.2004, 14:52:42
    #32644764
amel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Есть такое понятие курсоров в VB(A), советую заняться сразу программированием через них используя ADO или по старинке DAO. Так как форма только на чтение, то вы запоминаете где находились (id - ключ) открываете рекордсет обновляете и делаете рефрешь, ну и вовращаете на ту позицию на которой находились.
...
Рейтинг: 0 / 0
11.08.2004, 14:57:51
    #32644778
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
перепиши вот этот кусок так
Код: plaintext
1.
2.
3.
4.
5.
If MsgBox("Ðàñïðîñòðàíèòü èçìåíåíèå ñòàòóñà íà âñå îáúåêòû ñ äàííûì íîìåðîì ñâèäåòåëüñòâà???", vbYesNo, "Ðàñïðîñòðàíèòü?") = vbYes Then
                SQL_str = "UPDATE [Table] SET [Table].Precr_Prava_Sobstv = False WHERE (((Table.NumSvidet)=" & Me.NumSvidet.Value & "));"
                DoCmd.RunSQL SQL_str
                 'Me.Refresh 
                Me.Requery
            End If

(с выражением лица)
...
Рейтинг: 0 / 0
11.08.2004, 15:07:41
    #32644812
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
у меня большое подозрение, что эффект будет тот же

правда узнать мы это сможем только если энтот товарисч откликнется
...
Рейтинг: 0 / 0
11.08.2004, 15:09:28
    #32644820
GuestN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Только Me.Requery до выполнения запроса,
и в событии AfterUpdate
...
Рейтинг: 0 / 0
12.08.2004, 06:47:25
    #32645691
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конфликт записи - как решить
Спасибо "GuestN".
Я поставил доп. условие на то, чтобы поправленная ручками запись не менялась и диалог конфликта пропал.

Другие варианты не пробовал, этот мне понравился с первого взгляда, так что про их работоспособность ничего сказать не могу.

AfterUpdate мне не подходит тем, что его нельзя откатить встроенными средствами, а в BeforeUpdate есть Cancel, а Undo мне никогда не нравился, да и работает он как-то кривовато.

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


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