![]() |
DELPHI Нужна помощь! Обновление БД.
Столкнулся с проблемой при разработке многопользовательской БД.
Задача такая: С одной таблицей работают два пользователя в одно время. Первый пользователь изменяет данные в таблице и сохраняет их. В то время Второй пользователь работая с этой же таблицей не получает обновленные данные, т.е. работает с неизмененными данными. Внимание вопрос: Как заставить сервер БД обновлять данные у всех пользователей? Для справки. БД paradox. :help: |
IMHO никак ( это, вобще-то нерешаемая проблема ) откуда сервер может знать нужны ли пользователю эти обновленные данные? ( а еще и такой сервер как парадокс... )
|
Только заставляя пользователей обновлять данные вручную.
А вообще почитай про эти проблемы: * неповторяющееся чтение (non-repeatable read); * "грязное" чтение (dirty read) - чтение данных, которые были записаны откатанной транзакцией; * потерянное обновление (lost update); * фантомная вставка (phantom insert). А также уровни изоляции и блокировки. |
Единственный способ - это перечитывание клиентом данных.
Обычно, в таких случаях, клиент с некоторой частотой провереяет не обновлялись ли на сервере данные (к примеру считывает время последненго обновления из специальной таблицы), и если обновляллись то перечитывает их самостоятельно. |
Цитата:
|
kot_, подписаться пародоксу... очень сомневаюсь что получится...
|
:) Я имел виду не парадокс - а создать трехзвенку - и работать с ней. Я ведь так понимаю - еслиб задача совем мизирная была и одноразовая - и проблем бы особых не было. Плюсы - можно спокойно забыть о недостатках файлсервера, спокойно реализовать все бизнес правила, создать нужный функционал. Минус - прийдется попарится с СОМ-серверами и внести изменения в существующую программу. Иногда конечно подобные минуса перевешивают все плюса - но тут уже по месту.
|
Цитата:
Цитата:
|
Для начала - необязательно для этого заморачиваться с версионностью - при вставке/изменении записи - для начала генерить событие и обработать его в приложении. Ничего особо грандиозного в данном случае нет и задачу способно решить без особо дополнительных расходов. Можно в принципе - что бы не переделывать приложение - реализовать отдельно сервер уведомлений. Это будет достаточно простое решение - правда не очень изящное. Вопрос ведь был задан - как уведомить пользователя о изменении, а не как реализовать версионность. Ком -сервер вполне эту задачу может выполнить, а если понадобится разруливание доступов - это тоже в тех же дельфях телается за день.
|
Цитата:
|
Блин. Сервак падает раз, за разом.
Че за байда? Что бы написать и отправить пост - четыре часа уходит ****************** Можно. Один из вариантов - создаешь сервер уведомлений на основе хотябы тогоже билдеровского РДМ-модуля. Делается это достаточно просто - создаешь новый проект - в него добаваляешь RDM-модуль(не забудь поставить галочку в эвентсах) и модель выбирай о вкусу - апартмент - на каждого юзера запускается отдельное приложение например, я предпочитаю фри - но эта модель достаточно сложна. Сохраняешь и лезешь в Type Library и в интерфейсах своего класса прописываешь необходимые тебе функции. В импл-модуле определяешь их. После определяешь какие события будут ловиться на твоих клиентах. Соответственно объявляешь их. Дальше свой сервер запускаешь с параметром /regserver. В принципе с сервером все.:) А ну соответственно в классе формы и классе интерфейса надо определить функции - это ниже. Для клиента прийдется написать заголовочный файл интерфейса класса событий и подключить в проект. Выглядит примерно так: Код:
#if !defined (NOTCREMOUTESINK_H__)Код:
TCOMInOTCRemouteModule m_remoute;//Твой сервер уведомленийНу вот в принципе и все. Просто у меня сервер решает более сложные задачи, которые может быть в твоем случае и на.х не нужны - и работа с базой у меня тоже идет через него. По этому я не расписывал функции логирования на сервер - главное - ты должен создать объект пользователя, приципить к нему уникальный ид и привязать ссылки на дм и рдм. И соответственно при дисконнекте - это все освободить. Да - еще это предполагает что ты пользуешься моделью взаимодействия фри - при аппартменте возможно будет гораздо проще - просто на каждого юзера будет стартовать сое приложение. |
| Часовой пояс GMT +4, время: 07:17. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.