Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Как блокировать таблицу при помощи ADO   Найти похожие ветки 

 
Eugene1501   (2010-06-15 16:21) [0]

Здравствуйте.

Ситуация в следующем:
1. Есть приложение для работы с базой данных в сети через  ADOConnection -> ADOCommand,ADOQuery.
2. База данных - Access.

Необходимо дать возможность приложению заблокировать на время таблицу ххх на запись и чтение так чтобы другие пользователи при обращении к таблице ххх просто ждали пока блокировка будет снята. Что-то типа Exlusive в TTable;


 
12 ©   (2010-06-16 13:45) [1]

может, что-то типа

begintrans
update table set fld = 1 where 1=1
делаем что-то и
rollbacktrans

или
begintrans, ,
и вообще модификация структуры таблицы,
действия,
откат


 
Виталий Панасенко(дом)   (2010-06-16 18:40) [2]


> 12 ©   (16.06.10 13:45) [1]

а если в fld не 1, а 2?

мне так кажется, что так д.б.
update table
set fld=fld

а вообще, возможно, есть свои готовые заморочки


 
12 ©   (2010-06-17 08:34) [3]


> возможно, есть свои готовые заморочки

99% есть
надо на форумах VB смотреть. Что-то типа Lock table, если память не изменяет


> Виталий Панасенко(дом)   (16.06.10 18:40) [2]
>
> а если в fld не 1, а 2?

неважно, потом же rollbacktrans


 
Eugene1501   (2010-06-18 15:46) [4]


> может, что-то типа
>
> begintrans
> update table set fld = 1 where 1=1
> делаем что-то и
> rollbacktrans


Пока выполняется транзакция другие пользователи могут читать данные из таблицы, такой вариант не подходит (.


 
Eugene1501   (2010-06-18 15:50) [5]

Нужно сделать следующее:

1. Заблокировать таблицу на чтение для других пользователей.
2. Прочитать определенное значение.
3. Записать определенное значение.
4. Разблокировать таблицу.


 
Anatoly Podgoretsky ©   (2010-06-18 19:31) [6]

> Eugene1501  (18.06.2010 15:50:05)  [5]

Заблокировать таблицу и уехать в командировку на пару недель.


 
sniknik ©   (2010-06-19 13:04) [7]

вот почему как только сделают технологию избавленную от некоторых недостатков, так тут же появляются те кто не представляет себе программирования/логики без этих недостатков?

> Нужно сделать следующее:
почему нельзя сделать вместо этого "следующего" следующее:
> 2. Прочитать определенное значение.
> 3. Записать определенное значение.
???


 
Palladin ©   (2010-06-19 17:07) [8]


> sniknik ©   (19.06.10 13:04) [7]

Ну чего ты придираешься? ) Ну не представляет чудо-программист себе жизни без процедуры Exlusive ) Не понимает что блокировать-то не таблицы надо, а древо данных на уровне корневого объекта )


 
Anatoly Podgoretsky ©   (2010-06-19 17:59) [9]

Вообще ничего блоумровать не надо, не зато боролись


 
12 ©   (2010-06-21 15:21) [10]


> Eugene1501   (18.06.10 15:46) [4]
>
>
> > может, что-то типа
> >
> > begintrans
> > update table set fld = 1 where 1=1
> > делаем что-то и
> > rollbacktrans
>
>
> Пока выполняется транзакция другие пользователи могут читать
> данные из таблицы, такой вариант не подходит (.


а если попробовать update структуры?
(например, имя поля переименовать)


 
sniknik ©   (2010-06-21 19:34) [11]

не получится, т.к. "помощи ADO" ([0]), а он ориентирован на запросы. вот если бы не это ограничение то можно было посмотреть на методы ADOX/jet/jro там глядишь и нашлось бы что-то блокирующее таблицу... т.к. они могут работать непосредственно с обьектами. ну и тогда о запросах пришлось бы забыть, только табличные методы.


 
Eugene1501   (2010-06-23 18:02) [12]

Ладно, может подскажете как организовать следующее:

Есть таблица "Документы"  - ключевое поле "Id". Максимальное значение поля "Id" я храню в таблице "wtId". При добавление нового документа, открываю таблицу wtId, читаю значение Id, увеличиваю на единицу и записываю новое значение Id, которое использую при добавлении документа в таблицу "Документы". Такой вот механизм формирования значения ключа. Все хорошо до тех пор, пока не начинается работа в сети нескольких пользователей. Бывают ситуации, что разные пользователи одновременно формируют этот уникальный ключ и получают одинаковые значения, при записи документа естественно происходит ошибка. Как с этим бороться?


 
Anatoly Podgoretsky ©   (2010-06-23 20:23) [13]

> Eugene1501  (23.06.2010 18:02:12)  [12]

База у тебя есть?


 
sniknik ©   (2010-06-24 07:51) [14]

нужно не с этим, само изобретенным велосипедом, бороться, а сделать нормальную структуру таблицы с автоинкрементным id.
и вообще, не выдумывать своего, кривого, пока не изучишь что для этого есть уже, стандартное.


 
Eugene1501   (2010-06-24 13:47) [15]


> База у тебя есть?

Есть.


 
Eugene1501   (2010-06-24 13:50) [16]


> нужно не с этим, само изобретенным велосипедом, бороться,
>  а сделать нормальную структуру таблицы с автоинкрементным
> id.
> и вообще, не выдумывать своего, кривого, пока не изучишь
> что для этого есть уже, стандартное.


То есть, я так понимаю для формирования уникального ключа можно использовать только автоинкрементные поля?

А как быть в том случае, если мне нужно получить значение ключевого поля для только что вставленной записи? Причем ключевое поле, назовем его Id, единственный уникальный идентификатор записи таблицы.


 
Anatoly Podgoretsky ©   (2010-06-24 15:13) [17]


> > База у тебя есть?
>
> Есть.

Ну так и пользуйся ее возможностями.


 
12 ©   (2010-06-24 15:21) [18]

http://support.microsoft.com/kb/815629


 
sniknik ©   (2010-06-24 15:28) [19]

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


 
sniknik ©   (2010-06-24 15:31) [20]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.099 c
15-1341007816
vasa777
2012-06-30 02:10
2013.03.22
0-Core


3-1276771669
_REA
2010-06-17 14:47
2013.03.22
Одна таблица или несколько?


15-1330005162
Artem
2012-02-23 17:52
2013.03.22
Посоветуйте программу-терминал...


15-1342612759
Кто б сомневался
2012-07-18 15:59
2013.03.22
Дженерики - примеры где с ними было бы лучше


2-1334139178
Jimmy
2012-04-11 14:12
2013.03.22
Обработка 32-битного PNG с помощью ScanLine





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский