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




Пост N: 6313
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.17 16:40. Заголовок: DbrLock и DbrLockList


Что то я потерялся.
 
Use test shared new
//test->(Dbgoto(1))
test->(Dbrlock(1))

//test->(Dbgoto(10))
test->(Dbrlock(10))
? hb_valtoexp(test->(dbrlocklist()))

Запустил одну копию программы и получил {1,10}
Запустил вторую копию этой же проги и получаю пустой массив {}
Почему ?
Собственно нужно выяснить какие записи заблокированы.

PS
Похоже dbrlocklist работает не так как я хотел )

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


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




Пост N: 6314
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.17 17:03. Заголовок: IsDbRLock( xRec ) бу..


IsDbRLock( xRec ) будучи запущенным из другой копии с той же базой дает результат что запись
не блокирована.
Единственно что верно срабатывает это Rlock() , но мне же не нужно блокировать запись на самом деле
а надо просто выяснить какие записи в локе.


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




Пост N: 1067
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.03.17 18:27. Заголовок: Дима, эта проблема ..


Дима, эта проблема еще со времен клиппера тянется. Первые стоны прозвучали при работе в DOS сессии W95.
Решения похоже нет, во всяком случае при обычной работе с DBF.

В ADS можно корректно получить все блокировки SQL запросом, ну ты понимаешь что для этого нужно)))
Ps. Можешь свою на базе dbeval нарисовать

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




Пост N: 6315
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.17 18:36. Заголовок: Haz пишет: В ADS м..


Haz пишет:

 цитата:

В ADS можно корректно получить все блокировки SQL запросом


Каким ?
Может есть аналог в rddads...

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




Пост N: 6316
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.17 18:51. Заголовок: Вот эта вроде пашет ..


Вот эта вроде пашет ADSMGGETLOCKS , только с параметрами не до конца разобрался

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




Пост N: 6317
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.03.17 19:05. Заголовок: Haz Вот так вроде з..


Haz
Вот так вроде заработало
 
aray:=ADSMGGETLOCKS(50,DBF+"onluser.dbf")

if !empty(aray)
if ascan(aray,recs)#0
ret:=.t.
endif
endif



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




Пост N: 1068
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.03.17 00:17. Заголовок: Дим Сам нашел))) я ..


Дим
Сам нашел))) я был в спортзале, память уже не та и без шпаргалки никак. Только приехал. Завтра гляну еще
.

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




Пост N: 6318
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.17 09:30. Заголовок: Haz пишет: Сам наше..


Haz пишет:

 цитата:
Сам нашел


Не совсем
Haz пишет:

 цитата:
В ADS можно корректно получить все блокировки SQL запросом


Залез в справку и пробил SP_ и поехал по списку в поисках локов , нашел 2 подходящие и стал смотреть Help
по ним. После глянул чего есть в RDDADS.
С параметрами вроде не ошибся , работает.

PS
И по ходу идея переместить базу в "ZERO SPACE" была полезной. Это защитило ее от Dbcloseall() которые
я так часто люблю делать

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




Пост N: 6363
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.19 14:34. Заголовок: Всем привет ! Вот то..


Всем привет !
Вот тоже полез заново разбираться с блокировкой записи.
Вопрос возник такой:
Если делаешь раз блокировку записи (cAls)->(DBUnlock()) нужно ли после неё делать (cAls)->(DbCommit()) ?
Если не делать, то чем это грозит ?

Не совсем понял описание функции - IsLocked( [<nRecno>] ) --> lIsLocked
Description
IsLocked() tests if a database record is currently locked for write access by this process.
It cannot detect, if a record lock is set by another process

IsLocked () проверяет, заблокирована ли в данный момент запись базы данных для доступа на запись этим процессом.
Он не может определить, установлена ли блокировка записи другим процессом

Или это так переводчик переводит ?

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




Пост N: 6364
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.19 15:47. Заголовок: Кажись понял на тест..


Кажись понял на тестовой программе.
Из другой программы определить нельзя, блокирована ли запись или нет.
Блин и как тогда определить блокирована ли запись или нет ?
Опять через семафорный файл как в терминалке делать ?
Есть ли другие решения ?

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


Пост N: 1537
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.19 16:12. Заголовок: Andrey пишет: Есть ..


Andrey пишет:

 цитата:
Есть ли другие решения ?


dbRLock() возвращает значение.
https://www.itlnet.net/programming/program/Reference/c53g01c/ng2e977.html

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




Пост N: 6365
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.19 16:59. Заголовок: DBRLOCK () - это ..


   DBRLOCK () - это функция базы данных, которая блокирует запись, идентифицированную 
значение <xIdentity>. В Xbase <xIdentity> - это номер записи.

Если вы не укажете <xIdentity>, все блокировки записи будут сняты, а
текущая запись заблокирована. Если вы укажете <xIdentity>, DBRLOCK ()
пытается заблокировать его и, в случае успеха, добавляет его в заблокированную запись
список.

Т.е. нужно переделывать все блокировки (cAlias)->(RLock()) на эту новую функцию ?
И тогда можно будет из другой программы что запись заблокирована другим процессом ?

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


Пост N: 1538
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.19 17:47. Заголовок: Определить, заблокир..


Определить, заблокирована ли запись или нет, можно как-то так:
IF dbRLock()
...
ELSE
? "Запись заблокирована"
END

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




Пост N: 6366
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.19 17:51. Заголовок: PSP пишет: Определи..


PSP пишет:

 цитата:
Определить, заблокирована ли запись или нет, можно как-то так:
IF dbRLock()
...
ELSE
? "Запись заблокирована"
END


А как же хелп ?
Если вы не укажете <xIdentity>, все блокировки записи будут сняты, а
текущая запись заблокирована. Если вы укажете <xIdentity>, DBRLOCK ()
пытается заблокировать его и, в случае успеха, добавляет его в заблокированную запись
список.

Т.е. я при проверке сам и заблокирую эту запись.

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


Пост N: 1540
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.19 18:01. Заголовок: Если запись заблокир..


Если запись заблокирована другим процессом, то dbRLock() вернёт .F. в любом случае.
Параметр служит для указания номера записи, которую нужно заблокировать. Если параметра нет, то производится попытка блокировки текущей записи, а блокировка других записей (если такие есть) текущего процесса снимается. Если параметр указан, то производится попытка блокировки записи, указанной параметром, но при этом эта запись добавляется в список заблокированных в текущем процессе. Определить же, заблокирована ли запись другим процессом, можно просто по возвращаемому значению dbRLock(). Если она вернула .F., то запись уже заблокирована в другом процессе.

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


Пост N: 1541
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.19 18:06. Заголовок: Andrey пишет: Т.е. ..


Andrey пишет:

 цитата:
Т.е. я при проверке сам и заблокирую эту запись


Ну и что? Да, она заблокируется, но её ж можно тут же разблокировать, если требуется.

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




Пост N: 6367
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.19 18:55. Заголовок: PSP пишет: Ну и что..


PSP пишет:

 цитата:
Ну и что? Да, она заблокируется, но её ж можно тут же разблокировать, если требуется.


Понял. Спасибо !

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




Пост N: 7078
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.19 21:05. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос возник такой:
Если делаешь раз блокировку записи (cAls)->(DBUnlock()) нужно ли после неё делать (cAls)->(DbCommit()) ?


Уже обсуждали. В начале DbCommit после DBUnlock

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




Пост N: 6368
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.19 14:43. Заголовок: Dima пишет: Уже обс..


Dima пишет:

 цитата:
Уже обсуждали. В начале DbCommit после DBUnlock


Почему ?
Везде в примерах сначала DBUnlock а потом DbCommit !

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




Пост N: 7079
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.07.19 15:31. Заголовок: Andrey пишет: Везде..


Andrey пишет:

 цитата:
Везде в примерах сначала DBUnlock а потом DbCommit !


Делай как считаешь нужным
Или читани темку http://clipper.borda.ru/?1-3-0-00000137-000-10001-0-1287163818

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


Пост N: 1542
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 27.07.19 15:32. Заголовок: DBCOMMIT() Flush pe..


DBCOMMIT()
Flush pending updates
------------------------------------------------------------------------------
Syntax

DBCOMMIT() --> NIL

Returns

DBCOMMIT() always returns NIL.

Description

DBCOMMIT() causes all updates to the current work area to be written to
disk. All updated database and index buffers are written to DOS and a
DOS COMMIT request is issued for the database (.dbf) file and any index
files associated with the work area.

DBCOMMIT() performs the same function as the standard COMMIT command
except that it operates only on the current work area. For more
information, refer to the COMMIT command.

Notes

. Network environment: DBCOMMIT() makes database updates visible
to other processes. To insure data integrity, issue DBCOMMIT()
before an UNLOCK operation
. For more information, refer to the
"Network Programming" chapter in the Programming and Utilities Guide.

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

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