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

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

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

Я прально поняла
Private Sub Grid_Error(ByVal DataError As Integer, Response As Integer)
rs.Resync
Response = 0
End Sub
...
Рейтинг: 0 / 0
23.08.2007, 18:46
    #34749015
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid вопрос по ошибке.
Да, примерно так
Код: 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
24.08.2007, 11:38
    #34750188
Jet_q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid вопрос по ошибке.
Спасибо за помощь. Правда сделала немного иначе, вместо rs.Resync пришлось написать RS.CancelBatch adAffectCurrent, иначе все равно рекордсет не обновлялся.
...
Рейтинг: 0 / 0
24.08.2007, 11:54
    #34750264
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TDBGrid вопрос по ошибке.
Да, только не забывайте о PostEvent. Иногда манипуляции с рекордсетом допустимы лишь после выхода из события.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TDBGrid вопрос по ошибке. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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