Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Как блокировать таблицу при помощи 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.059 c
15-1330633805
Юрий
2012-03-02 00:30
2013.03.22
С днем рождения ! 2 марта 2012 пятница


15-1337890087
vasa777
2012-05-25 00:08
2013.03.22
D WD (Delphi Xe3)


15-1331627201
advise
2012-03-13 12:26
2013.03.22
Подскажите на каих ресурсах можно найти программиста Delphi


2-1340016908
webpauk
2012-06-18 14:55
2013.03.22
Перехват нажатия клавиши мыши


2-1339141857
Александр_2012
2012-06-08 11:50
2013.03.22
Об управлении монитором