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

Вниз

Как заблокировать локальную всю БАЗУ данных   Найти похожие ветки 

 
Num Lock   (2003-02-14 08:45) [0]

Я делаю так:

Database.Exclusive:= True;
Database.Open;

, но другие пользователи и приложения всё равно могут открывать таблицы.


 
VAleksey ©   (2003-02-14 11:43) [1]

Назначь Exclusive = true всем DataSet - ам


 
Num Lock   (2003-02-14 15:08) [2]

У меня в программе есть процедура проверки таблиц на целостность индексов, и заголовков, и на время выполнения этой процедуры необходимо запрещать другим пользователям доступ к таблицам, поэтому Ваш способ не подойдет. Если в таблице есть повреждение, то Dataset даже не откроется. И это долго - переоткрывать все таблицы (несколько сотен мегабайт). И как в общем случае проверить, что кто то уже подключен к Базе?


 
roadrunner   (2003-02-14 15:59) [3]

если програ подключается через BDE,можно посмотреть через функцию
DbiOpenUserList.В helpe по BDE есть пример.Функция делает таблицу в памяти, где будет список пользователейт пользующихся данной БД(директорией где она хранится)


 
Num Lock   (2003-02-17 09:24) [4]

Спасибо!


 
Anatoly Podgoretsky ©   (2003-02-17 09:38) [5]

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


 
MsGuns ©   (2003-02-17 12:12) [6]

>Anatoly Podgoretsky © (17.02.03 09:38)
Это совет - шутка ?

Если после "финта ушами", т.е. переименования, прога не сможет завершиться нормально, то, похоже, чел останется вовсе без ушей (без БД) ;)))


 
Anatoly Podgoretsky ©   (2003-02-17 12:15) [7]

Ухи будем отрывать программисту за финт


 
Reindeer Moss Eater   (2003-02-17 12:23) [8]

Database1.Exclusive:=True;
//Открыть все таблицы БД.
for i:=0 to Pred(.....) do ....


 
MsGuns ©   (2003-02-17 12:28) [9]

>Reindeer Moss Eater (17.02.03 12:23)
>//Открыть все таблицы БД.

Ну и что, после этого другие не смогут получить доступ к таблицам ?
ИМХО, надо в цикле ВСЕ таблицы ДО открытия перевести в экслюзив в защищенном блоке. Если хоть одна попытка не удастся, все остальные разблокировать и дать соотв. сообщение, после чего вообще закрыть БД (убрать за собой все следы в .lck)


 
Reindeer Moss Eater   (2003-02-17 12:30) [10]

MsGuns ©
Имелось ввиду то, что для блокирование всей базы данных необходимо открыть монопольно все таблицы.
Вот и все.



 
Num Lock   (2003-02-19 16:08) [11]


> Anatoly Podgoretsky © (17.02.03 09:38)

- Я думаю что под "базой данных" в общем случае понимается совокупность таблиц входящих в неё.
- а финт с переименованием - это круто! Это именно то, что нужно.
1. Пытаюсь переименовать папку
2. Если получается, то делаю то, что мне нужно, и переименовываю обратно.
3. Если при открытии программы оригинальная папка не существует, а существует только временная, то переименовываю её взад, даже можно попробовать повторить выполнение операции



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

Текущий архив: 2003.03.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-29850
вопрос
2003-02-28 13:54
2003.03.10
Excel


3-29729
F1
2003-02-19 11:05
2003.03.10
AV при ADOQuery.ExecSQL


14-30101
Adolf
2003-02-22 13:45
2003.03.10
МЕЧТА ПРОГРАММЕРА


4-30190
Natalie
2003-01-21 21:18
2003.03.10
как узнать имена компов в сети?


3-29743
vega777
2003-02-19 14:34
2003.03.10
Запортилась таблица