Автор | Сообщение |
|
| постоянный участник
|
Пост N: 4933
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.05.16 16:05. Заголовок: почему сбоит блокировка записи или что-то я пропустил ?
Пишу здесь, так как тему новую заводить не хочу. Вопрос такой - почему сбоит блокировка записи или что-то я пропустил ? На локальном компе работает отлично. А в сети свалилась.
|
|
|
Ответов - 29
, стр:
1
2
All
[только новые]
|
|
|
| Администратор
|
Пост N: 3445
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.05.16 16:16. Заголовок: Как бы RLock() выдае..
Как бы RLock() выдается для abonent, а FieldPut неизвестно для чего
|
|
|
|
| |
Пост N: 5661
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.05.16 16:24. Заголовок: Andrey пишет: FIELD..
Andrey пишет: цитата: | FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) // строка 305 |
| 1. Уточни алиасом обе функции Andrey пишет: 2. См. пункт 1 Andrey пишет: 3. См. пункт 2 4. цитата: | DO WHILE ABONENT->NN == nIDD |
| DO WHILE ABONENT->NN == nIDD .and. !ABONENT->(eof())
|
|
|
|
| постоянный участник
|
Пост N: 4934
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.05.16 23:28. Заголовок: Dima пишет: 1. Уточ..
Dima пишет: цитата: | 1. Уточни алиасом обе функции |
| Я выше делаю перед DO WHILE ABONENT->NN == nIDD SELECT ABONENT Из-за этого считаю что что не обязательно делать: ABONENT->DBUNLOCK() и ABONENT->SKIP Или нужно ?
|
|
|
|
| Администратор
|
Пост N: 3447
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 07:58. Заголовок: Тогда и необязательн..
Тогда и необязательно делать abonent->(RLock()) Нам же не видно, что там стоит выше. И не видно, что в месте .............
|
|
|
|
| постоянный участник
|
Пост N: 4935
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 10:02. Заголовок: Pasha пишет: Нам же..
Pasha пишет: цитата: | Нам же не видно, что там стоит выше. И не видно, что в месте ............. |
| Каюсь, упустил при задании вопроса. Так в чём ошибка в коде у меня ? Почему вылетает с ошибкой ?
|
|
|
|
| |
Пост N: 5663
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.05.16 10:10. Заголовок: Andrey пишет: NEXT ..
Andrey пишет: цитата: | NEXT .......... DBUNLOCK() |
|
Andrey пишет: Что живет между NEXT и DBUNLOCK() ?
|
|
|
|
| постоянный участник
|
Пост N: 4936
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 11:40. Заголовок: Dima пишет: Что жив..
Dima пишет: цитата: | Что живет между NEXT и DBUNLOCK() ? |
| Штук 5 присвоений типа: ABONENT->XXXX := ..... Потом вызов другой функции, где я делаю: LOCAL nSel:=SELECT(), nRec:=RECNO() .... SELECT( nSel ) RETURN xCode
|
|
|
|
| Администратор
|
Пост N: 3448
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 11:58. Заголовок: в рабочей области ab..
в рабочей области abonent текущая запись смещается ? Если дается фрагмент кода, то непонятно, что делается за этим фрагментом. Тогда на вопроc: цитата: | Так в чём ошибка в коде у меня ? Почему вылетает с ошибкой ? |
| дать ответ невозможно
|
|
|
|
| |
Пост N: 5664
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.05.16 12:07. Заголовок: Pasha пишет: в рабо..
Pasha пишет: цитата: | в рабочей области abonent текущая запись смещается ? |
| +1 По ходу с таким "кодом" подозреваю что где то сменилась и рабочая область , поэтому FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) будет выполнятся совсем не по abonent
|
|
|
|
| |
Пост N: 970
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.05.16 12:21. Заголовок: А смотрю тут одни эк..
А смотрю тут одни экстрасенсы тусуются , пытаясь дать ответ угадывая что там в коде и где Andrey пишет: цитата: | Потом вызов другой функции, где я делаю: |
| в итоге мы в 10 серии узнаем что там делается abonent->(dbGoTop())
|
|
|
|
| |
Пост N: 5665
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.05.16 12:24. Заголовок: Haz пишет: Andrey п..
Haz пишет: цитата: | Andrey пишет: цитата: Потом вызов другой функции, где я делаю: |
| Вероятно из нее вызывается еще какая то функция Andrey Давай весь код уже , если там не 2 гига сырцов
|
|
|
|
|
| постоянный участник
|
Пост N: 4937
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 13:50. Заголовок: Haz пишет: А смотрю..
Haz пишет: цитата: | А смотрю тут одни экстрасенсы тусуются , пытаясь дать ответ угадывая что там в коде и где |
| Аналогично... Сам иногда выступаю в его роли. Просмотрел ещё раз исходники - нет больше других рабочих областей. И abonent->(dbGoTop()) нигде не делаю. Поставил везде отладку, буду смотреть почему в сети отваливается. Код где вываливается не критична, ну тенденция мне НЕ НРАВИТЬСЯ. На терминалке в хХарборе никогда не было таких сетевых ошибок. В МиниГуи по другому - нужно перестраиваться и быть ОЧЕЕЕНННЬЬЬЬ внимательным... Сам натыкался на такие залёты...
|
|
|
|
| Администратор
|
Пост N: 3449
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 13:55. Заголовок: Думаю что там кода м..
Думаю что там кода много, так что попробуем обойтись без него. Поэтому вкратце: Чтобы исключить ошибки lock require. надо: - успешно заблокировать нужную запись через RLock() - выполнять запись только в нужной рабочей области - если текущая запись в этой рабочей области сместилась, вернуть ее назад перед модификацией данных - не вызывать dbUnlock() в этой рабочей области - не выдавать rlock() на другой записи в этой области примерно так. Можно, конечно, еще постараться и получить lock requred другими способами, дальше распространяться не буду.
|
|
|
|
| Администратор
|
Пост N: 3451
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 14:04. Заголовок: Если ошибка происход..
Если ошибка происходит в среде hmg, то не может ли какой-нибудь контрол при получении или потере фокуса изменить текущую рабочую область ? Чтобы предохранится от этого, достаточно при обращении к рабочей области прамо указывать алиас.
|
|
|
|
| постоянный участник
|
Пост N: 4939
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 14:12. Заголовок: Pasha пишет: - если..
Pasha пишет: цитата: | - если текущая запись в этой рабочей области сместилась, вернуть ее назад перед модификацией данных |
| Скорее всего вот в этом у меня ошибка. Так как поля которые я в цикле заполняю - входят в индексное выражение. Но я нигде индекс не меняю... Хотя возникает другая непонятка - такой код под хХарбором работал без ошибок. Скрытый текст Индекс - DbSetOrder(2) по ID номеру, т.е. по числу. Поля и значения aField[] входят в другие индексы 3,4 SELECT ABONENT DbSetOrder(2) SEEK nIDD IF !FOUND() //MsgLog("----- нет списка по ID=",nIDD) ELSE DO WHILE ABONENT->NN == nIDD IF ABONENT->(RLock()) FOR nJ := 1 TO LEN(aField) // поля для добавления из БД-DOGOVOR FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) NEXT ABONENT->ADRESPRN := ADRES2HMG() ABONENT->ADRESKEY := ADRES2KEY() ABONENT->TIMEVVOD := 0 ABONENT->( DbUnlock() ) nRecWrt++ ELSE MsgInfo("Запись "+HB_NtoS(RECNO())+" в БД- "+Alias()+" заблокирована!") ENDIF SELECT ABONENT SKIP ProcessMessages() // Чтобы форма НЕ замирала ENDDO ENDIF // !FOUND()
|
|
|
|
|
| постоянный участник
|
Пост N: 4940
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 14:15. Заголовок: Pasha пишет: Если о..
Pasha пишет: цитата: | Если ошибка происходит в среде hmg, то не может ли какой-нибудь контрол при получении или потере фокуса изменить текущую рабочую область ? Чтобы предохранится от этого, достаточно при обращении к рабочей области прамо указывать алиас. |
| Да у меня эта ошибка в МиниГуи происходит. Там еще прелодер сидит при показе в цикле. Везде стоит явное указание на БАЗУ !
|
|
|
|
| Администратор
|
Пост N: 3452
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 14:18. Заголовок: Ну как бы не везде. ..
Ну как бы не везде. В самой интересной строке: FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) // строка 305 как раз не стоит
|
|
|
|
| Администратор
|
Пост N: 3453
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.05.16 14:21. Заголовок: ProcessMessages() //..
ProcessMessages() // Чтобы форма НЕ замирала может приводить к потере фокуса окном, получением его другим контролом, у которого что-то выполнится на bGotFocus. Я конечно точно не знаю, что там, но подобные вещи могут происходить.
|
|
|
|
| |
Пост N: 5666
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.05.16 14:23. Заголовок: Andrey пишет: ABONE..
Andrey пишет: цитата: | ABONENT->ADRESPRN := ADRES2HMG() ABONENT->ADRESKEY := ADRES2KEY() |
| Шо живет в этих функциях ?
|
|
|
|
| постоянный участник
|
Пост N: 4941
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.16 15:47. Заголовок: Pasha пишет: может ..
Pasha пишет: цитата: | может приводить к потере фокуса окном, получением его другим контролом, у которого что-то выполнится на bGotFocus. Я конечно точно не знаю, что там, но подобные вещи могут происходить. |
| Понятно.... Dima пишет: цитата: | Шо живет в этих функциях ? |
| Да я уже писал по них: чтение из других 2-х баз, с восстановлением SELECT(nSel). На хХарборе уже лет 7 как работало без сбоев. А тут перетащил в МиниГуи кусок и на тебе - засада. Может FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) - заменить на другой код ?
|
|
|
Ответов - 29
, стр:
1
2
All
[только новые]
|
|