Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
ВнизОдновременная работа с базой... Найти похожие ветки
← →
serko © (2006-11-23 22:02) [0]Здраствуте дорогие...
Я вот делаю сетевую базу для 11 клиентов. Ну т.е. есть сервер на котором эта база и стоит, ну а все пользователи по ходу своей работы добавляют инфу в базу...
Как сделать так чтобы при внесении изменений 1 клиентом, прошизошло обновление у всех остальных?
У меня пока получается так! На 2-х компа открыта одна и та же прога, на одном компе я добавил одну запись в базу... На втором компе ничего не обновиться пока не перезапустиш прогу.
Просветите меня плиз в этом вопросе...
← →
Anatoly Podgoretsky © (2006-11-23 22:29) [1]> serko (23.11.2006 22:02:00) [0]
Мало информации, разве что можно сделать предположение, что у тебя кеширующие запросы. Cached Updates
У FireBird обновление делается не у клиентов, а на сервер. Те кто заинтересован в более свежей информации спрашивают об этом сервер.
А ты спрашиваешь?
← →
serko © (2006-11-23 22:38) [2]Ну у меня каждый клиент только добавляется данные (никогда их не редактирует), ну и у каждого клиента должна быть возможность просмотреть добавленные данные всеми пользователями....
А как опросить сервер?
← →
Desdechado © (2006-11-23 22:40) [3]SQL.Text:= "SELECT..."
← →
Anatoly Podgoretsky © (2006-11-23 22:47) [4]> serko (23.11.2006 22:38:02) [2]
Close/Open
← →
serko © (2006-11-23 23:04) [5]Вот Close\Open делал не помагает....
← →
DrPass © (2006-11-23 23:32) [6]А еще пишущим транзакциям commit делать не забываем
← →
MsGuns © (2006-11-23 23:34) [7]>serko © (23.11.06 23:04) [5]
>Вот Close\Open делал не помагает....
В TIBTransaction стоит неправильный isolationlevel
← →
Бугага © (2006-11-24 04:31) [8][6] Ну если он при перезапуске приложения изменения видит, то скорее всего [7]
← →
PEAKTOP © (2006-11-24 10:44) [9]
CREATE TRIGGER TRIG$MYTABLE_ADIU_255 FOR MYTABLE
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 255
AS
BEGIN
POST_EVENT "MY_TABLE_CHANGED";
END
На AfterPost датасета вешаешь
procedure MyTable1.AfterPost(DataSet :TDataSet);
begin
IBCustomDataSet(DataSet).Transaction.Commit;
DataSet.Open;
end;
И кидаешь на форму IBEvents,
IBEvents1.Events.Text := "MY_TABLE_CHANGED";
← →
Desdechado © (2006-11-24 16:11) [10]PEAKTOP © (24.11.06 10:44) [9]
Я б за такое кастрировал. Без шуток.
1. Подтверждение транзакции на афтерпост - дурость в большинстве случаев, ибо транзакция может состоять (и обычно состоит) из взаимоствязанных изменений разных датасетов.
2. Ивенты использовать имхо можно использовать только в программках-гляделках и то только одного вида - где ничегоне анализируют, а только отслеживают динамику. Типа тетриса заявок каких-нибудь.
3. Если ивент будет срабатывать когда юзер что-то редактирует, он тебе голову оторвет. Особенно, если это происходит от каждого изменения большого кол-ва соседних пользователей.
← →
Romkin © (2006-11-24 16:18) [11]Да просто транзакции закривать надо!
У TIBTransaction хотя бы поставить AutoStopAction = saCommit, ну по минимуму! Транзакции на изменение - read committed, на чтение - см. как надо. И все будет работать
← →
Anatoly Podgoretsky © (2006-11-24 16:28) [12]> Desdechado (24.11.2006 16:11:10) [10]
Но последнее время много развелось желающих обновить.
← →
Alexandr © (2006-11-24 20:03) [13]тетрис заявок говоришь....
хм, зачотно
← →
serko © (2006-12-19 23:49) [14]Ну у меня данные стали обновляться только при Open\Close...
А реально вообще сделать моментальное обновление данных у всех клиентов? Как?
← →
Anatoly Podgoretsky © (2006-12-19 23:57) [15]> serko (19.12.2006 23:49:14) [14]
Смерти клиентов хочешь?
← →
Petr V. Abramov © (2006-12-20 00:06) [16]старая идея, через которую все проходят :)
но почему-то рынок за 20 лет на нее не отреагировал...
ответ такой - бросить эту затею, т.к. работа во-первых - может, во-вторых - оптимально быть организована таким образом, что это не надо.
опишите задачу, и Вам подскажут, как сделать так, чтоб вопрос отпал сам собой
← →
serko © (2006-12-20 22:36) [17]
> Смерти клиентов хочешь?
Почему сразу смерти? Поясните...
> опишите задачу, и Вам подскажут, как сделать так, чтоб вопрос
> отпал сам собой
Проблему я описал в своем ВОПРОСЕ!
← →
Petr V. Abramov © (2006-12-21 00:35) [18]> Проблему я описал в своем ВОПРОСЕ!
Вы описали в ВОПРОСЕ описали ПРОБЛЕМУ, которая возникла в процессе решения ЗАДАЧИ.
Не факт, что решение задачи связано с проблемой, которую Вы описали. Если ХОЧЕТСЯ проблему решить - никто ж не говорит, что труд - это некузяво
← →
pavel_guzhanov © (2006-12-21 08:46) [19]
> Почему сразу смерти? Поясните...
это уже объяснено в
> Desdechado © (24.11.06 16:11) [10]
> 3. Если ивент будет срабатывать когда юзер что-то редактирует,
> он тебе голову оторвет. Особенно, если это происходит от
> каждого изменения большого кол-ва соседних пользователей.
>
попытаюсь объяснить попонятнее: Юзер просматривает данные. Находится где-то в середине или в конце таблицы. В это время другой юзер вносит данные в базу. После этого первый юзер вылетает из того места, где он был, получает обновленные данные и начинает искать ту строку, с которой он работал. И так каждый раз, после того, как кто-то внесет в базу какие-то данные.
Для получения обновленных данных я бы предусмотрел на форме кнопку, типа "обновить", чтобы юзер, если ему нужны обновленные данные, нажимал на нее, и получал их
← →
Anatoly Podgoretsky © (2006-12-21 12:23) [20]> pavel_guzhanov (21.12.2006 8:46:19) [19]
А нормальной системе такое происходит сотню раз в секунду.
← →
Дмитрий Белькевич © (2006-12-21 13:31) [21]>Для получения обновленных данных я бы предусмотрел на форме кнопку, типа "обновить", чтобы юзер, если ему нужны обновленные данные, нажимал на нее, и получал их
+1
Пока ничего лучшего стабильно работающего не найдено.
p.s. но юзеры всё равно умудряются эту кнопку стабильно не нажимать....
← →
Anatoly Podgoretsky © (2006-12-21 13:39) [22]> Дмитрий Белькевич (21.12.2006 13:31:21) [21]
Да их право.
← →
pavel_guzhanov © (2006-12-21 14:11) [23]
> но юзеры всё равно умудряются эту кнопку стабильно не нажимать.
> ...
так никто и не заставляет :0)) Просто если надо получить свежие данные, то нажмет...
← →
Sergey13 © (2006-12-21 14:18) [24]> > но юзеры всё равно умудряются эту кнопку стабильно не
> нажимать.
Потому тут постоянно и говорят, что эта "проблема" обычно присутствует только в головах неопытных программистов.
← →
serko © (2006-12-21 22:01) [25]Уговорили! Спасибо вам ...
← →
аноним (2006-12-22 05:54) [26]еще предложение - редактирование/вставка не в гриде, а в отдельной форме
по подтверждению - опционально можно обновить набор данных
кнопушку - "Обновить" тож можно предусмотреть - выключать после клика юзера, а включать по эвенту - надо будет - нажмет, не надо - его головная боль
← →
mr.il © (2006-12-22 10:39) [27]евентами не пользовался, но такое решение: Кнопка "обновить" задизейблена; Если получаем евент, делаем её енаблед; При нажатии кнопи, после отработки процедуры, делаем её снова дизаблед.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.052 c