powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid вопрос по ошибке.
6 сообщений из 6, страница 1 из 1
TDBGrid вопрос по ошибке.
    #34747145
Jet_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем Grid полностью редактируемый. Все вроде работает нормально, но в какой-то момент(произвольный) выдается ошибка :"Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения". Т.е. оператор вносит исправления, что-то добавляет, удаляет, радактирует строки в разных столбцах, а потом бах и ошибка...В чем может быть причина?

Set rs = New ADODB.Recordset
rs.Open "select * from users", conn, adOpenDynamic, adLockOptimistic
Set Grid.DataSource = rs
...
Рейтинг: 0 / 0
TDBGrid вопрос по ошибке.
    #34748086
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно другим пользователем изменены данные.
Поставьте adLockPessimistic

У TDBGrid есть событие Error где можно обработать эту ошибку, вызвать Resync рекордсета.
В событии есть свойство Responce которым можно подавить сообщение об ошибке.
...
Рейтинг: 0 / 0
TDBGrid вопрос по ошибке.
    #34748457
Jet_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По идеи другой пользователь не может изменить именно эти данные, т.к. рекордсет берется из одной таблицы по UID пользователя.

Я прально поняла
Private Sub Grid_Error(ByVal DataError As Integer, Response As Integer)
rs.Resync
Response = 0
End Sub
...
Рейтинг: 0 / 0
TDBGrid вопрос по ошибке.
    #34749015
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub TDBGrid1_Error(ByVal DataError As Integer, Response As Integer)
  If DataError = НомерВашейОшибки Then
    rs.Resync
    Response =  0 
    TDBGrid1.PostMsg  1   'Есть такое полезное событие PostEvent - сделать что-то после выхода из процедуры
  End If
End Sub

Private Sub TDBGrid1_PostEvent(ByVal MsgId As Integer)
   If MsgId =  1  Then
      TDBGrid1.Refresh
   End If
End Sub
А если пользователь монопольно открывает таблицу, то незачем открывать рекордсет как adOpenDynamic.
Откройте его adOpenStatic - будет меньше проблем.
...
Рейтинг: 0 / 0
TDBGrid вопрос по ошибке.
    #34750188
Jet_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь. Правда сделала немного иначе, вместо rs.Resync пришлось написать RS.CancelBatch adAffectCurrent, иначе все равно рекордсет не обновлялся.
...
Рейтинг: 0 / 0
TDBGrid вопрос по ошибке.
    #34750264
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, только не забывайте о PostEvent. Иногда манипуляции с рекордсетом допустимы лишь после выхода из события.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid вопрос по ошибке.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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