|
|
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Как в одном объекте Recordset заблокировать сразу несколько записей (от редактирования), не блокируя остальные? Смысл такой, что надо в одной транзакции по мере нахождения номеров поставщиков в одном удаляемом документе (у нас так бывает) их блокировать, чтобы с ними не смогли работать другие (у них будет проверкана блокировку этой записи), т.к. сальдо может измениться. Блин, как-то сложно получилось, но я думаю, что все-таки разобраться можно :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:58 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
И еще. Заранее неизвестно сколько надо будет заблокировать записей одну или пять. Поэтому создать несколько объектов типа Recordset неудобно. Можно ли в ОДНОМ Recorset'е заблокировать НЕСКОЛЬКО записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:27 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
где-то это уже было... поищи на форуме или на www.msaccess.ru или там же на форме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:29 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Что-то на форуме я такого не нашел. Или торможу - использую не те ключевые слова, или все-таки такого здесь нет. На форуме говорится про то, как СНЯТЬ блокировку и почему запись блокируется, а про то как самому заблокировать несколько записей - ни слова :( Может кто ссылочку на подобную тему скинет (если я все-таки торможу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:54 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
2NoRoV Често говоря мне влом рыться в форумах... Это так сказать то что тысам можешь сделать... А в общем я вообще не понимаю зачем тебе это понадобилось?????? Существует масса альтернативных простых способов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:06 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Получилось так, что база поначалу была создана для одного отдела (4 машины), но со временем стали подключаться другие модули и так получилось, что надо делать блокировки на редактировние в одном отделе, чтобы аналогичные (по бухгалтерскому смыслу) корректировки не были произведены в другом отделе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:15 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Ну и ну... Делаешь пользовательскую систему работы с базой (если такой не имеется) и в зависимости от того, кто вошел показываешь соответствующую информацию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:18 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Я не очень понял предыдущий ответ, но постараюсь пояснить. Нужно сделать так, чтобы записи блокировались и открывались в довольно быстром темпе - бухгалтерское закрытие и корректировка. Это должно быть так, чтобы не сильно мешать другим пользователям. Если ты имееш в виду создание таблицы с записью тех номеров, которые заняты, то есть один минус - если пользователь будет выкинут из базы (откл. свет), то эти блокировки так и останутся висеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:26 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Неее ты не понял... При входе пользователю, например, бухгалтеру присваивается некий уникальный идентификатор ID. После этого все формы отображают\не отображают ту или иную информацию и т.п. И какой в попу "откл. свет", если эти настроики устанавливаются при входе для конкретного пользователя... Зайдешь заново в базу и продлжишь работать (если, конечно, свет вкл.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:35 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
2 VsevolodV Извиняюсь за задержку, но у нас тут время немножко побольше, чем у Вас (в смысле разные часовые пояса), а в сети я из дома (на работе нету). Возможно я плохо объяснил (скорее всего), но бухгалтер постоянно сидит в своей проге и из разных мест может делать различные корректировки, в т.ч. и из главной. Если прога будет ругаться на запуск других форм, то бухгалтера пошлют меня. Мне надо, чтобы при корректировке документа конкретного(ных) поставщиков блокировались только они, а с другими можно было работать без проблем. 2 All Может все-таки кто-нибудь знает, как заблокировать НЕСКОЛЬКО записей в ecordset'е. Или хотя бы ссылочку. А то получаются какие-то пустые разговоры (никого не хочу обидеть), а идей нет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 14:56 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
не знаю о том ли я, но все равно скажу :) как вариант : на основе рекордсета, открыть новый, который содержит только нужные для блокировки записи и его целиком заблокировать. помоему красиво ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:01 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
2 sasha_1 Идея неплохая, но мне кажется, что не сработает, т.к. заблокируется все равно вся таблица (если я понял правильно, то предлагаешь использовать dbDenyWrite) dbDenyWrite НЕ работает (дает ошибку) если кто-то еще использует таблицу, это не подходит. Если предлагаешь заблокировать поочередно выбранные записи, то при блокировке следующей предыдущая разблокируется. Если это не так, то поправте меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:14 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Насколько мне известно, невозможно заблокировать в одном recordset'e больше одной записи одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:17 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Вообще-то блокировка всегда идет страницами (пейджами). Когда программа дает команду заблокировать одну запись, то блокируется весь пейдж. Другое дело, что если записи достаточно длинные, то одна запись занимает весь пейдж и ничего лишнего не блокируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:20 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
А целенаправленно блокировать несколько записей надо программно. Заводим таблицу блокировок (ID записи и имя юзера), заносим в нее то, что хотим заблокировать, по окончании стираем это из таблицы блокировок, а каждый юзер, прежде чем что-то взять для редактирования, тоже сначала сверяется с таблицей блокировок - и если занято, то получает сообщение ("заблокировано юзером таким-то"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:23 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
вообще-то насколько я понимаю dbDenyWrite как раз блокирует весь рекордсет от записи других пользователей. >dbDenyWrite НЕ работает (дает ошибку) если кто-то еще использует таблицу естественно. а как ты хотел заблокировать то, что сейчас меняют, надо подождать (программно) пока все из нее выйдут и заблокировать. по-моему путь правильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:26 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
про один из способов создания очередей есть вот здесь: http://am.rusimport.ru/msaccess/topic.aspx?ID=196 Сам код там правда для SQL Serverа, но на для Access подход должен быть примерно таким же. То есть (как сказал Владимир Саныч) создается таблица с перечнем заблокированных ресурсов, и (о чем он не упомянул) возможность автоматического снятия блокировки при неожиданном отключении компьютера, заблокировавшего ресурс. В SQl версии для этого проверяется табл. sysprocesses. В Access версии для этого считаю возможным использовать рекордсет с dbDenyWrite. То есть для этоих целей создается отдельная база данных и под каждый ресурс в ней придется создавать таблицу (раз блокируется вся таблица целиком) и открывать на ней рекордсет с параметром dbDenyWrite. Если удалось - значит вы владеете ресурсом, если нет - то обрабатываете ошибку (из которой можно выцепить имя того, кто "держит" ресурс) и ждете. При этом варианте использование первой таблицы становится в общем то необязательным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 15:45 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
> То есть (как сказал Владимир Саныч) создается таблица с перечнем заблокированных ресурсов, и (о чем он не упомянул) возможность автоматического снятия блокировки при неожиданном отключении компьютера, заблокировавшего ресурс. Действительно, не упомянул. У меня для этой цели сделаны две вещи. Во-первых, каждый юзер при входе обнуляет все собственные блокировки, которые могли остаться в результате неожиданного отключения системы. (Это плохо в том случае, если один юзер имеет право держать несколько сессий.) Во-вторых, у одного "главного" юзера имеется интерфейс, позволяющий стереть конкретную блокировку вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 16:13 |
|
||
|
Блокировка нескольких записей в Recordset
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, но у них есть свои недостатки. -если блокировать ВСЮ таблицу, то никто не сможет поменять данные - если пользователей много, то это проблематично. -создание таблицы блокировок однозначно не решает вопрос "выпадения" пользователя Что если использовать Clone. Я ею не пользовался, но предполагаю, что получится создать массив Recordset и при открытии корректировки расклонировать Recordset и в каждом отдельно сделать свои блокировки. Правда я не знаю, как это отразится на быстродействии и используемой памяти. Кто знает, подскажите, где здесь подводные камни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2003, 10:05 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1757&tid=1679708]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 297ms |

| 0 / 0 |
