Вот некоторые хитрости, могущие помочь в разработке баз
многопользовательского доступа:
В модуле DBIPROCS Delphi 1.0 и в BDE.INT 2.0 существует классная функция с
именем DBISETLOCKRETRY(n).
Синтаксис - DBISetLockRetry(n), где n - количество секунд ожидания перед
повторной попыткой вставки, редактирования или другой операцией с таблицей.
DBISetLockRetry(-1) будет бесконечно пытаться получить доступ к вашей таблице.
Хорошее место для вызова функции - обработчик события TableAfterOpen. В этом
случае все, что вам нужно сделать, это:
Если вы используете Delphi 1.0, не забудьте включить в вашу программу
DBIProcs. В Delphi 2.0 включите BDE.
Мой заказчик и я разработали многопользовательскую базу данных
по вашему рецепту, до этого наши пользователи получали сообщения "File is
Locked" (файл заблокирован), "Table is Busy" (таблица занята), "Record Locked"
(запись заблокирована) и др. Мы также пробовали Session.Netdir, но он не помог
нам. Поскольку мы добавили в код эту строку, никаких блокировок не было. Частота
обращений пользователей к базе достаточно велика (80 kpm). Мы разработали
"измеритель скорости доступа" с 2 открытыми сессиями на двух компьютерах в сети
Novell 4.1. Две сессии занимались вставкой, две другие редактированием, а мы
сами занимались посылкой данных с частотой около 65 записей в минуту в течение
операций редактирования и 85 в течение вставки. Сеть чуть не захлебнулась от
такой работы. Утилизация файлового сервера была до нас около 60%. Не плохо для
всего! Я думаю Borland необходимо задокументировать такой подход, чтобы другие
не становились хакерами типа нас! :)
Эти требования обязательны при разработке многопользовательских приложений
Delphi с использованием файлов Dbase или Paradox.
- Ted Bulmanski |