Автор | Сообщение |
|
| постоянный участник
|
Пост N: 6372
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.19 21:52. Заголовок: Блокировка записи в Dbf-файле
Всем привет ! Есть ли какие новые методы получения сведений о блокированных записей для DBF ? Или всё что осталось с Клипера перешло в Харбор и нового ничего нет. Я про ЛетоДБ знаю. На клипере в своё время лет 20 назад делал блокировку записей через семафорные файлы. Целая статья была в фирменном журнале Клипера. Перетащил этот вариант в терминалку Харбора, до сих пор работает. Теперь делаю на МиниГуи новую задачу, хотелось бы понять как дальше работать с обычным DBF. Как можно сделать блокировку записи, чтобы другой процесс определял бы это и мог выдавать какой юзер это сделал ?
|
|
|
Ответов - 8
[только новые]
|
|
|
| |
Пост N: 7081
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.19 07:38. Заголовок: Andrey пишет: Перет..
Andrey пишет: цитата: | Перетащил этот вариант в терминалку Харбора, до сих пор работает. |
| Andrey пишет: цитата: | Теперь делаю на МиниГуи новую задачу |
| А какая разница для блокировок терминалка это или XXXGui ? Функциям xxxLock() фиолетово какой у тебя вариант терминалка или нет. Если нужен расширенный функционал , пиши самопал...думаю сложного тут нет ни чего.
|
|
|
|
| постоянный участник
|
Пост N: 1544
Зарегистрирован: 27.01.07
|
|
Отправлено: 30.07.19 09:11. Заголовок: Уточни, как именно д..
Уточни, как именно должно выглядеть "чтобы другой процесс определял бы это и мог выдавать какой юзер это сделал"?
|
|
|
|
| постоянный участник
|
Пост N: 6373
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.07.19 18:48. Заголовок: PSP пишет: Уточни, ..
PSP пишет: цитата: | Уточни, как именно должно выглядеть "чтобы другой процесс определял бы это и мог выдавать какой юзер это сделал"? |
| Примерно так: Таблица, всё редактирование в таблице происходит ТОЛЬКО через карточку. В этой карточке если запись не кем не занята, то юзер её может править. Если карточка блокирована другим процессом, то должна появляться надпись: Запись блокирована другим юзером: 1, 2, 3 и нет редактирования полей карточки. Вот примерно так.
|
|
|
|
| постоянный участник
|
Пост N: 1545
Зарегистрирован: 27.01.07
|
|
Отправлено: 30.07.19 20:00. Заголовок: Я бы сделал так: а)..
Я бы сделал так: а) добавить в каждую таблицу поле LockByUser (имя поля - для примера), в котором будет храниться идентификатор пользователя, заблокировшего запись; б) после успешной (dbRLock() == .T.) блокировки записи в это поле записывается идентификатор текущего пользователя (используем dbCommit()); в) по окончании редактирования записи, перед dbRUnLock(), поле LockByUser очищается, используем dbCommit() и производится разблокирование; г) если попытка блокирования записи окончится неудачей (dbRLcok() == .F.), читаем поле LockByUser и выводим информацию о пользователе, который в настоящий момент занял запись. Вроде всё...))
|
|
|
|
| |
Пост N: 7082
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.19 22:04. Заголовок: Andrey пишет: Табли..
Andrey пишет: цитата: | Таблица, всё редактирование в таблице происходит ТОЛЬКО через карточку. В этой карточке если запись не кем не занята, то юзер её может править. |
| Не знаю что там имеется в виду под карточкой , но у себя сделал так: если кто то зашел в документ на редактирование (накладная например) , то блочу весь документ пока юзер из него не выйдет , включая конечно проверку на возможность такой блокировки и если она успешна то после её окончания блок снимаю. Месаги конечно вешаю если документ заблочить не удаётся пишу и кто блокнул. Хранится всё это дело в отдельной базе блокировок по видам документов. Ранее без этого дела N-кол-во юзеров могло зайти в документ и править его
|
|
|
|
| постоянный участник
|
Пост N: 2700
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.07.19 23:29. Заголовок: Dima пишет то блочу ..
Dima пишет цитата: | то блочу весь документ пока юзер из него не выйдет , включая конечно проверку на возможность такой блокировки и если она успешна то после её окончания блок снимаю. |
| Использую механизм "владелец документа", т.е. кто создал тот может менять, другие, если определено, могут смотреть. "Владельца" можно сменить, тогда он может менять, как правило это разделяется временными операциями. Блокировки только при записи.
|
|
|
|
| постоянный участник
|
Пост N: 6374
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.07.19 06:55. Заголовок: Dima пишет: Не знаю..
Dima пишет: цитата: | Не знаю что там имеется в виду под карточкой |
| Примерно вот так: Dima пишет: цитата: | Месаги конечно вешаю если документ заблочить не удаётся пишу и кто блокнул. Хранится всё это дело в отдельной базе блокировок по видам документов. |
| А если прога слетела у кого то, кто заблокировал документ - как тогда делаешь ?
|
|
|
|
| постоянный участник
|
Пост N: 6409
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.08.19 12:48. Заголовок: PSP пишет: Я бы сде..
PSP пишет: Вроде получилось как надо ! Пример в новом МиниГуи SAMPLES\Advanced\Tsb_Basic_2 Запускаем 2-3 экземпляра программы и получается то что нужно !
|
|
|
|