![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
доброго времени суток!
проблема такая...есть программа с базами данных....нужно осуществить переиндексацию баз...программа работает в многопользовательском режиме - у нескольких пользователей. естесно переиндексацию можно выполнять только в эксклюзивном режиме. как узнать запущена ли программа у каких-нибудь пользователей? т.е. при нажатии "Переиндексировать базу данных" осуществляется проверка запущена ли уже копия программы, если да, то выдает сообщение, если нет - то проводит переиндексацию. если в момент переиндексации другой пользователь открывает программу, выходит сообщение о том, что в данный момент идет переиндексация. |
|
#2
|
||||
|
||||
|
смотря что за база данных, подход может быть различным. серверная СУБД: kick all users, listener disable. файловая БД - exclusive mode.
|
|
#3
|
||||
|
||||
|
база - 2 файла dbf, подцепленные к программе посредством ini файла
|
|
#4
|
||||
|
||||
|
ну наверняка они на сервере? shared folders to close == exclusive mode
![]() |
|
#5
|
||||
|
||||
|
не совсем это имела ввиду....мне же надо сначала проверку пустить, открыта ли программа еще у кого....я думала делать CreateFile при каждом запуске программы....и этот файл нельзя будет удалить пока открыта программа....т.е. сделать проверку существования таких файлов...и если они есть - вывести окно о невозможности перехода в эксклюзивный режим, если же нет, то тогда произвести переиндексацию...
базы да, на сервере |
|
#6
|
||||
|
||||
|
если кому-то будет интересно...вышла из положения следующим путем:
в FormCreate занесла Код:
FileHandle:=FileCreate('semafor.txt'); //создала файл
FileClose(FileHandle);//закрыла
FileHandle:=FileOpen('semafor.txt', fmShareDenyNone);//открыла файл в многопользовательском режимеКод:
FileClose(FileHandle);
if DeleteFile('semafor.txt') then
begin
//переиндексация
FileHandle:=FileCreate('semafor.txt');
FileClose(FileHandle);
FileHandle:=FileOpen('semafor.txt', fmShareDenyNone);
ShowMessage('Переиндексация успешно завершена!');
end
else
ShowMessage('Переиндексация невозможна!');
end; |