![]() |
|
Модераторы: Akina |
![]()
|
|
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Есть ли способ отследить обращения других юзверей к таблице с которой я в данный момент работаю?
Или хотя бы получить сигнал, что мои данные, выбранные SELECT'ом устарели? А то у меня пользователь работает с БД, пока он туды изменения вносит другие могут уже что-то заменить. Обновление по таймеру согласитесь, мягко говоря, тупой вариант. P.S. использую OLE DB Это сообщение отредактировал(а) DENNN - 22.4.2003, 09:37 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Есть достаточно IMHO неплохой способ, но его реализация не простая и требует достаточных трудозатрат.
Кстати этот вариант еще раз кидает камешек на весы изменений только с помощью stored procedures. Вообщем можно написать внешнюю dll, которая может быть зарегистрирована на MS SQL как обычная stored процедура. Тогда ее можно просто использовать как и встроенную. Посмотреть как писать такую dll можно в документации. Эта процедура может рассылать например сообщения подключенным клиентам по IP (TCP или UDP). Ну а на клиентах уже можно принимать решения - обновлять, не обновлять. Ну и прочая. Вызывать такую процедуру можно из триггера на изменение или из процедуры, которая делает такое (второй вариант мне больше нравится) |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Да процесс не детский. Если только готовый код откуда-нибудь скопировать и подправить. Но и после этого доработка архитектуры может потребоваться.
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Есть еще вариант посылки нотификаций, но он вряд ли будет интересен.
Там можно посылать только на е-мэйл, пейджер или команду net send. Вообщем выбор не очень |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Да если найти способ перехвата сообщений от сервака до операционки, то можно было бы воспользоваться.
|
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Возможно (судя по тексту) проблема в неправильной организации транзакций/блокировок. Если же вопрос только в необходимости отслеживания изменений - то предложение AntonSaburov очень сильное. Ведь в нем предлагается задействовать одно из преимуществ MS SQL - возможность вызывать, не выходя из своей среды, некоторые функции операционки. Триггеры могут вызывать любые процедуры расширения (xp_*), имеющиеся на сервере, а также любые внешние процедуры, которые добавлены к серверу с использованием команды sp_addextendedproc . Конечно, в IB это можно сделать более грамотно, через события, но, как говорится, имеем что имеем... -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Альтернативным, улучшенным вариантом (по сравнению с таймером ;) ) может быть следующий подход. При подключении к БД создаем временную таблицу в которую заносим информацию при модификации основных данных (через триггеры). В примитиве, это может быть запись состоящая только из поля дата\время. И по таймеру обращаться к ней. Благо скорость обращения к временным таблицам очень высокая. И в зависимости от времени последнего изменения перечитываем основные данные или нет. Разумеется это грубый набросок, который, возможно потребуется усовершенствовать или усложнить, но привлекает простотой своей реализации -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Возможно всем будет интересно узнать.
Я тут откопал, что OLE DB поддерживает интерфейс IRowsetNotify подключаемый через точки соединения. Так вот и провайдер данных, и подключившийся могут обмениваться сообщениями, среди которых есть и уведомления о вставки в таблицу, к которой сейчас получен доступ новых записей другим подключением, об изменении данных записи где находится курсор другим процесом и т.п. ;) |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Насчет MS-SQL я точно не знаю, а вот в Oracle такая фитча присутсвует. В Oracle это предусмотрено.
-------------------- |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Я прочитал об этом в документации MS и похоже что MS-SQL должен поддерживать такую фичу.
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Здесь есть только одна проблема - а если я для соединения использую не OLE ? Тот же ODBC, BDE или еще что-то. Хотя такое уже в принципе встречается не часто. |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: нет Всего: 43 |
Вопрос именно по OLE, что делать с BDE не имею представления, да честно говоря и ненадо
|
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |