On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4933
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.05.16 16:05. Заголовок: почему сбоит блокировка записи или что-то я пропустил ?


Пишу здесь, так как тему новую заводить не хочу.

Вопрос такой - почему сбоит блокировка записи или что-то я пропустил ?

Произвожу обработку базы в цикле (база открыта в режиме SHARED):
Скрытый текст

Выдаёт ошибку где-то в конце обработки базы:


На локальном компе работает отлично. А в сети свалилась.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]


Администратор




Пост N: 3445
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.05.16 16:16. Заголовок: Как бы RLock() выдае..


Как бы RLock() выдается для abonent, а FieldPut неизвестно для чего

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5661
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.05.16 16:24. Заголовок: Andrey пишет: FIELD..


Andrey пишет:

 цитата:
FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) // строка 305


1. Уточни алиасом обе функции
Andrey пишет:

 цитата:
DBUNLOCK()


2. См. пункт 1
Andrey пишет:

 цитата:
SKIP


3. См. пункт 2
4.
 цитата:
DO WHILE ABONENT->NN == nIDD


DO WHILE ABONENT->NN == nIDD .and. !ABONENT->(eof())

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Или нужно ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3447
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 07:58. Заголовок: Тогда и необязательн..


Тогда и необязательно делать abonent->(RLock())
Нам же не видно, что там стоит выше. И не видно, что в месте .............

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4935
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 10:02. Заголовок: Pasha пишет: Нам же..


Pasha пишет:

 цитата:
Нам же не видно, что там стоит выше. И не видно, что в месте .............



Каюсь, упустил при задании вопроса.

Так в чём ошибка в коде у меня ?
Почему вылетает с ошибкой ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5663
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.05.16 10:10. Заголовок: Andrey пишет: NEXT ..


Andrey пишет:

 цитата:
NEXT
..........
DBUNLOCK()

Andrey пишет:
Что живет между NEXT и DBUNLOCK() ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3448
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 11:58. Заголовок: в рабочей области ab..


в рабочей области abonent текущая запись смещается ?
Если дается фрагмент кода, то непонятно, что делается за этим фрагментом.

Тогда на вопроc:

 цитата:
Так в чём ошибка в коде у меня ?
Почему вылетает с ошибкой ?


дать ответ невозможно


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5664
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.05.16 12:07. Заголовок: Pasha пишет: в рабо..


Pasha пишет:

 цитата:
в рабочей области abonent текущая запись смещается ?


+1
По ходу с таким "кодом" подозреваю что где то сменилась и рабочая область ,
поэтому FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) будет выполнятся совсем не
по abonent

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 970
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.05.16 12:21. Заголовок: А смотрю тут одни эк..


А смотрю тут одни экстрасенсы тусуются , пытаясь дать ответ угадывая что там в коде и где
Andrey пишет:

 цитата:
Потом вызов другой функции, где я делаю:


в итоге мы в 10 серии узнаем что там делается abonent->(dbGoTop())



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5665
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.05.16 12:24. Заголовок: Haz пишет: Andrey п..


Haz пишет:

 цитата:
Andrey пишет:

цитата:
Потом вызов другой функции, где я делаю:


Вероятно из нее вызывается еще какая то функция

Andrey
Давай весь код уже , если там не 2 гига сырцов

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4937
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 13:50. Заголовок: Haz пишет: А смотрю..


Haz пишет:

 цитата:
А смотрю тут одни экстрасенсы тусуются , пытаясь дать ответ угадывая что там в коде и где


Аналогично... Сам иногда выступаю в его роли.

Просмотрел ещё раз исходники - нет больше других рабочих областей. И abonent->(dbGoTop()) нигде не делаю.
Поставил везде отладку, буду смотреть почему в сети отваливается.
Код где вываливается не критична, ну тенденция мне НЕ НРАВИТЬСЯ.
На терминалке в хХарборе никогда не было таких сетевых ошибок.
В МиниГуи по другому - нужно перестраиваться и быть ОЧЕЕЕНННЬЬЬЬ внимательным...
Сам натыкался на такие залёты...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3449
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 13:55. Заголовок: Думаю что там кода м..


Думаю что там кода много, так что попробуем обойтись без него. Поэтому вкратце:
Чтобы исключить ошибки lock require. надо:

- успешно заблокировать нужную запись через RLock()
- выполнять запись только в нужной рабочей области
- если текущая запись в этой рабочей области сместилась, вернуть ее назад перед модификацией данных
- не вызывать dbUnlock() в этой рабочей области
- не выдавать rlock() на другой записи в этой области

примерно так. Можно, конечно, еще постараться и получить lock requred другими способами, дальше распространяться не буду.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3451
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 14:04. Заголовок: Если ошибка происход..


Если ошибка происходит в среде hmg, то не может ли какой-нибудь контрол при получении или потере фокуса изменить текущую рабочую область ?
Чтобы предохранится от этого, достаточно при обращении к рабочей области прамо указывать алиас.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4939
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 14:12. Заголовок: Pasha пишет: - если..


Pasha пишет:

 цитата:
- если текущая запись в этой рабочей области сместилась, вернуть ее назад перед модификацией данных



Скорее всего вот в этом у меня ошибка.
Так как поля которые я в цикле заполняю - входят в индексное выражение. Но я нигде индекс не меняю...
Хотя возникает другая непонятка - такой код под хХарбором работал без ошибок.

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4940
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 14:15. Заголовок: Pasha пишет: Если о..


Pasha пишет:

 цитата:
Если ошибка происходит в среде hmg, то не может ли какой-нибудь контрол при получении или потере фокуса изменить текущую рабочую область ?
Чтобы предохранится от этого, достаточно при обращении к рабочей области прамо указывать алиас.



Да у меня эта ошибка в МиниГуи происходит. Там еще прелодер сидит при показе в цикле.
Везде стоит явное указание на БАЗУ !



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3452
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 14:18. Заголовок: Ну как бы не везде. ..


Ну как бы не везде. В самой интересной строке:

FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) // строка 305

как раз не стоит

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3453
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 14:21. Заголовок: ProcessMessages() //..


ProcessMessages() // Чтобы форма НЕ замирала

может приводить к потере фокуса окном, получением его другим контролом, у которого что-то выполнится на bGotFocus. Я конечно точно не знаю, что там, но подобные вещи могут происходить.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5666
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.05.16 14:23. Заголовок: Andrey пишет: ABONE..


Andrey пишет:

 цитата:
ABONENT->ADRESPRN := ADRES2HMG()
ABONENT->ADRESKEY := ADRES2KEY()


Шо живет в этих функциях ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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] ) - заменить на другой код ?



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3454
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.16 15:55. Заголовок: типа так: abonent-&..


типа так:

abonent->( FIELDPUT( FIELDNUM(aField[nJ,1]),aField[nJ,2] ) )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4942
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 16:02. Заголовок: Спасибо ! :sm208: ..


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4948
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.05.16 17:15. Заголовок: Вопрос не в тему... ..


Вопрос не в тему...

Как узнать длину индексного выражения из индексного файла ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5667
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.16 17:24. Заголовок: Andrey ? &..


Andrey
? &(OrdKey())
? "Length of &(OrdKey()) :" + Str( Len( &(OrdKey()) ) )
? OrdKeyVal()
? "Length of OrdKeyVal() :" + Str( Len(OrdKeyVal()) )


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4949
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.05.16 18:11. Заголовок: Спасибо ! :sm36: ..


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 981
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.16 21:35. Заголовок: Andrey пишет: Как у..


Andrey пишет:

 цитата:
Как узнать длину индексного выражения из индексного файла ?


Уточню , все что сказал Дима справедливо при символьном ключе разумеется.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5669
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.16 21:45. Заголовок: Haz пишет: справедл..


Haz пишет:

 цитата:
справедливо при символьном ключе разумеется.


+1 , но Андрей не уточнял

есть вопрос к Андрею а для чего это тебе в задаче ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 982
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.16 23:05. Заголовок: Dima пишет: OrdKey..


Dima пишет:

 цитата:
OrdKeyVal()


может OrdKey() - возвращает именно индексное выражение а не значение ключа.
Возвращает всегда строку.
Но вот для чего получать его длину я не понял


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4950
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.05.16 10:54. Заголовок: Haz пишет: Но вот д..


Haz пишет:

 цитата:
Но вот для чего получать его длину я не понял


Когда делаешь сборный индекс по адресу в разных задачах (старых и новых) уже и не помнишь как сделал ранее индексный файл.
Типа "STR(KCITY,3)+STR(KSTREET,4)+UPPER(cNumHOUSE)+STR(NumKorp,4)+UPPER(cNumKvar)"
А поставив проверку (длину индекса) - хоть видишь где сам напортачил.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 17
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет