powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RecordSet зацикливание
19 сообщений из 19, страница 1 из 1
RecordSet зацикливание
    #33688044
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу привожу код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
' делаю выборку в рекордсет
l_objRecordSetSecond.Open "SELECT owncenterid, date, state FROM " & ConnectionParam.strTJL & _
     " WHERE tableid=" & l_TableID & _
     " .AND. dbid=" & l_DBID & _
     " .AND. recid=" & l_RECID & _
     " .AND. act<>'P'" & _
     " .AND. state>=0" & _
     " .AND. owncenterid<>" & l_DBIDinPackage, _
     l_objDBCConnection, adOpenDynamic, adLockOptimistic

'...
'...
' потом при определенных условиях, если это необходимо обновляю одно поле
Do Until l_objRecordSetSecond.EOF
             l_objRecordSetSecond.Fields("state").Value = - 1 
             l_objRecordSetSecond.Update
             If (Err <>  0 ) Then
                          l_flagWasError = True
                          Err.Clear
             End If
             l_objRecordSetSecond.MoveNext
Loop


В общем почему-то при определенных условиях цикл обновления зацикливается, т.е. l_objRecordSetSecond.EOF всегда False. А в остальных случаях нет. В чем проблема пока не вижу. Может есть какой другой способ определения кол-ва записей и текущего положения указателя на запись???
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688084
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Do Until l_objRecordSetSecond.EOF заменить на
Do while not l_objRecordSetSecond.EOF
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688320
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем шило на мыло менять 8) Все равно зацикливается.
Он то зацикливается, то нет.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688389
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Error Resume Next уберите, если он есть.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688613
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Положение исправилось заменой выборки, а именно вместо определенных полей выбирал все

Было
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
' делаю выборку в рекордсет

l_objRecordSetSecond.Open "SELECT owncenterid, date, state FROM " & ConnectionParam.strTJL & _
     " WHERE tableid=" & l_TableID & _
     " .AND. dbid=" & l_DBID & _
     " .AND. recid=" & l_RECID & _
     " .AND. act<>'P'" & _
     " .AND. state>=0" & _
     " .AND. owncenterid<>" & l_DBIDinPackage, _
     l_objDBCConnection, adOpenDynamic, adLockOptimistic


Стало
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
' делаю выборку в рекордсет
l_objRecordSetSecond.Open "SELECT * FROM " & ConnectionParam.strTJL & _
     " WHERE tableid=" & l_TableID & _
     " .AND. dbid=" & l_DBID & _
     " .AND. recid=" & l_RECID & _
     " .AND. act<>'P'" & _
     " .AND. state>=0" & _
     " .AND. owncenterid<>" & l_DBIDinPackage, _
     l_objDBCConnection, adOpenDynamic, adLockOptimistic


Просто вспомнил, что уже сталкивался с этой ерундой, но как-то забыл между делом. А тут бац и ошибка вылетела, хотя до этого все работало )
Надеюсь, на этом глюков не будет.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688814
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesOn Error Resume Next уберите, если он есть.т.е.
Код: plaintext
1.
2.
If (Err <>  0 ) Then
   Err.Clear ' !!!!!!!!!!!!!!
End If
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688893
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле т.е. ...
Да, в проге есть On Error Resume Next, просто писалось все это месяцев 5 назад, я тогда вообще не шарил в этом ) Походу надо выходить из цикла при условии возникновения ошибки. Какими доводами я руководствовался писав тот код уже не помню 8)
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688925
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто казалось, что если Recorset не сделает успешный Update, я отловлю эту ошибку, далее очищу объект Err, и перейду на сл. запись, которую тоже попытаюсь модифицировать, и так пока все записи не будут обработаны.
Поэтому и On Error Resume Next и эта проверка.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688934
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Do Until l_objRecordSetSecond.EOF
l_objRecordSetSecond.Edit
l_objRecordSetSecond.Fields("state").Value = -1
l_objRecordSetSecond.Update
If (Err <> 0) Then
l_flagWasError = True
Err.Clear
End If
l_objRecordSetSecond.MoveNext

Loop
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33688971
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такого метода у моего рекорсета нет - l_objRecordSetSecond.Edit ;)

В общем суть происходящего я так и не понял, хотя и решил проблему. Но это все заставляет призадуматься, - "А будет ли в дальнейшем работать?"
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33689016
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В обработчике надо ставить Resume
Иначе, после ошибки в рекордсете, MoveNext просто не сработает.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33689020
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M0r0Такого метода у моего рекорсета нет - l_objRecordSetSecond.Edit ;)

В общем суть происходящего я так и не понял, хотя и решил проблему. Но это все заставляет призадуматься, - "А будет ли в дальнейшем работать?"
а нуда это же ADO а не DAO
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33689184
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Положите на форму два лабела, два текстбокса и кнопку
И погоняйте программу по F8. Тогда все станет ясно.
Код: 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.
Private Sub Command1_Click()
   Dim i As Long
   On Error GoTo Err1
   i = Text1.Text
   Label1 = i
   GoTo EndErr1
Err1:
'Такой алгоритм предусмотрен разработчиками языка:
'   Text2 = 0   'Исправляем источник ошибки
'   MsgBox Err.Description, vbExclamation
'   Resume      'и идем назад, к строке что вызвала ошибку.
'Но мы делаем по-другому, корча из алгоритма структурную обработку ошибки
   Label1.Caption = "Ошбика!"
   Resume EndErr1   'Ничего не делать, идем дальше
EndErr1:
   On Error GoTo Err2
   i = Text2.Text
   Label2 = i
   GoTo EndErr2
Err2:
'А можно и так обрабатывать:
   i =  0 
   MsgBox Err.Description & vbCrLf & "Значение проигнорировано!", vbExclamation
'т.е. исправляем ошибку и продолжаем выполнение со следующей строки
   Resume Next
'   Resume EndErr2      'хотя, мне и здесь хочется сделать как раньше
EndErr2:
End Sub
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33689286
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо текстбоксов и лайблов можно использовать Debug.Print
и смотреть результат в окне отладки
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33689355
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую, но уже завтра, т.к. рабочий день ви енд 8)
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33690508
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M0r0
а какие индексы есть на таблице?

и лучше не используйте adOpenDynamic
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33691379
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Индексов на этой таблице нет вообще. adOpenDynamic нужна так как надо сразу же видеть изменения. В общем проблему решил и остановлюсь на этом решении, а дальше видно будет ;)
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33691398
M0r0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В догонку. Resume тоже не исправляет положение, Recordset все равно остается слепым как крот и не видет количества своих записей, а также не может взвести флаг EOF . Но это все так послесловие.
...
Рейтинг: 0 / 0
RecordSet зацикливание
    #33691695
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M0r0В догонку. Resume тоже не исправляет положение, Recordset все равно остается слепым как крот и не видет количества своих записей, а также не может взвести флаг EOF . Но это все так послесловие.
Измените тип курсора у l_objDBCConnection с серверного на клиентский.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RecordSet зацикливание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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