powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с рекордсетом
25 сообщений из 35, страница 1 из 2
Проблема с рекордсетом
    #32535696
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой обработчик на событие потери фокуса textbox-a, в кот обновляется рекордсет и в случае возникновеня ошибки (почему она может возникнуть не столь важно) нужно отменить обновление.
Проблема в том, что если потом не закрыть рекордсет и не открыть снова, то еще раз обновить его и сохранить изменения, кот могли быть в других полях не получается, так выдается опять эта ошибка, которую я ведь уже обработала ранее. Как избежать закрытия и открытия снова рекордсета?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
On Error GoTo Error_K_name_LostFocus
    MainDataEnvironment.rscmdKlientsNew.Update
Exit_K_name_LostFocus:
Exit Sub

Error_K_name_LostFocus:
    If Err.Number = - 2147217900  Then
        MsgBox "ошибка..."
        MainDataEnvironment.rscmdKlientsNew.CancelUpdate
        MainDataEnvironment.rscmdKlientsNew.Close
        MainDataEnvironment.rscmdKlientsNew.Open
        K_name.Text = MainDataEnvironment.rscmdKlientsNew.Fields("klient_name")
    End If

 Resume Exit_K_name_LostFocus
 
End Sub
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32535710
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу внести поправку - закрытие рекордсета здесь исключается.
Тогда вопрос непосредственно по поводу того: почему не удается сохранить изменения, сделанные в других полях после этой ошибки. Почему при Update она возникает снова?
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32535719
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текст ошибки можно увидеть?


Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32535724
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текст ошибки из моего триггера такой:
Изменение невозможно, так как имя клиента уже используется в других документах.
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32535726
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не от недоверия к вам(с)Какой-то наш фильм.
Но все-таки желательно оригинал.

Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536078
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не пойму какой оригинал нужен...
сообщение об ошибки выдается в случае модификации данных в конкретном поле, если код данного клиента есть еще и др таблице.
Текст триггера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER tklients_update ON dbo.TKlients 
FOR UPDATE 
AS  begin
if update(klient_name) and exists (select * from TDocuments, Deleted
	where TDocuments.pokupatel_id= deleted.klient_id)
	begin
	raiserror  50002  'Изменение невозможно, так как имя клиента уже используется в других документах.'	
	rollback tran
	end
end
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536133
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irinkaвыдается опять эта ошибка, которую я ведь уже обработала ранее
Код: plaintext
1.
2.
3.
4.
5.
6.
   End If
 
 Err.Clear  'The Clear method can be used to explicitly reset Err
 
 Resume Exit_K_name_LostFocus
 
End Sub
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536176
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Processor

Clear я попробывала, но он не помого.
Дело в том, что если я изменяю значение в поле klient_name, а его нельзя изменять (см текст триггера, когда именно нельзя), потом после сообщения и возврата старого значения я могу пересохранить и выйти, закрыв рекордсет. Потом, когда я войду снова и изменю др поля, я смогу сохранить изменения.
А вот если изменение поля klient_name (при срабтывании триггера и возврата старого значения) и изменение затем др полей происходит без закрытия рекодсета, а сразу, то уже почему-то триггер воспринимает как модификацию поля klient_name и сохранить не дает
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536195
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текст, кот сейчас:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
On Error GoTo Error_K_name_LostFocus

    MainDataEnvironment.rscmdKlientsNew.Update
 
Exit_K_name_LostFocus:
Exit Sub

Error_K_name_LostFocus:
    If Err.Number = - 2147217900  Then
        MsgBox "ошибка..."
        MainDataEnvironment.rscmdKlientsNew.CancelUpdate
        K_name.Text = MainDataEnvironment.rscmdKlientsNew.Fields("klient_name").Value
                
    End If
Err.Clear
  Resume Exit_K_name_LostFocus
 
End Sub
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536616
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ошибка будет с другим номером ?
Да и сообщение об ошибке очень информативное :-)
Может лучше вместо Error написать
err.Description + CStr(err.Number)
Да и у DataEnvironment есть тоже коллекция Errors
может стоит там посмотреть.
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536617
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду текст ошибки на алглийском.

Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536959
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текст только на русском, так как, этот текст из моего триггера
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32536966
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alviga

данная обработка на клиенте предназначена только для этого номера ошибки, если будут появляться др ошибки, пусть выдаются системные сообщения, я им не запрещаю, поэтому др я способ мне не нужен пока, спасибо.
Мне нужно найти причину почему при одно случае сохраняются изменения, а при др опять эта ошибка. Более подробно см выше
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537051
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА вот если изменение поля klient_name (при срабтывании триггера и возврата старого значения) и изменение затем др полей происходит без закрытия рекодсета, а сразу, то уже почему-то триггер воспринимает как модификацию поля klient_name и сохранить не дает

посмотри что в этом случае у тебя содержит рекордсет.
Возможно что это, старое значение, которыое и вызывает ошибку.
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537178
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверила - значение то, кот нужно, т е после ошибки изменения отменились и вернулось старое значение.
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537191
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, на счет триггеров.
В матчасти сказано, что "Триггер воспринимает любой апдейт поля как изменение, даже если новое значение идентично предыдущему."
Поэтому , нижно менять логику. Либо клиента либо триггера.


Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537201
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я знаю, только есть одно НО
сообщение уже выдалось и мы сделали CancelUpdate и сохранили.
а теперь уже это поле никак не изменяли, а поменяли др поля и сохранить не удается
а вот если выйти и зайти снова, поменять др поля и сохранить, то все сохраняется
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537206
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и при этом, когда мы меняем др поля, мы же тоже на кнопку ОК вешаем update рекордсета и ничего нормально
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537618
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если убрать эту строку
K_name.Text = MainDataEnvironment.rscmdKlientsNew.Fields("klient_name").Value

то все сохраняется нормально, но проблема в том, что изменения в textbox-e не отменяются и пользователь может подумать, что оно таким и останется, а на самом деле, если он выйдет, а потом зайдет снова, там будет первоначальное значение, кот он пытался изменить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub K_name_LostFocus()

On Error GoTo Error_K_name_LostFocus
If mybln4 = True Then
    If K_name.Text <> pk_name Then
    MainDataEnvironment.rscmdKlientsNew.Update
    pk_name = K_name.Text
    End If
End If

Exit_K_name_LostFocus:
Exit Sub

Error_K_name_LostFocus:
    If Err.Number = - 2147217900  Then
        MsgBox "..."
        K_name.Text = 
        MainDataEnvironment.rscmdKlientsNew.CancelUpdate
    End If
Err.Clear
Resume Exit_K_name_LostFocus
 
End Sub
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537622
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сори, туда попала лишняя строка, ну и чтобы не отвлекать внимание лишние условия пока тоже уберу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub K_name_LostFocus()
On Error GoTo Error_K_name_LostFocus
    MainDataEnvironment.rscmdKlientsNew.Update
Exit_K_name_LostFocus:
Exit Sub
Error_K_name_LostFocus:
    If Err.Number = - 2147217900  Then
        MsgBox "..."
        MainDataEnvironment.rscmdKlientsNew.CancelUpdate
    End If
Err.Clear
Resume Exit_K_name_LostFocus
 
End Sub
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537634
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чесно, я уже ничего не понимаю. ЗА день сделал 6 попыток вьехать в происходящее и с позором отступил.
Кто нибудь обьясните мне в чем все таки дело, если сами поняли?
Кто после чего выбрасывает или не выбрасывает?

Вот эта строка
Код: plaintext
K_name.Text = MainDataEnvironment.rscmdKlientsNew.Fields("klient_name").Value

вообще ни к чему никагого отношения не имеет.
Главная проблема ведь это ошибка из триггера?
Барышня, вы обьясняете настолько сумбурно что я скоро с катушек сьеду от непонимания устройства вселенной(с)ЛП
Или я к вечеру уже отупел.


Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537645
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прошения
объясняю я неочень...
но на самом деле, очень сложно понять чужую программу и причину, почему не работает если не видеть всех тонкостей, а мне трудно понять что именно нужно показать Вам, что все стало ясно и мне все время кажется что мы ходим вокруг
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537681
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не буду мучить, вопрос снимается
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537744
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спокойствие, только спокойствие.
Без паники, разберемся. По крайней мере постараемся.
Начнем все сначала только медленно и четко.


Magnus
...
Рейтинг: 0 / 0
Проблема с рекордсетом
    #32537761
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, тоже ничего не понял.Так что Магнус, ты не одинок :)
Особенно не понял, для чего откатывать транзакцию дважды. Сначала в тригере, а потом через рекордсет.
Вспоминается старый анекдот про еврея на нудистком пляже."Рабинович или снимите крест, или оденьте трусы"
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с рекордсетом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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