![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одновременная работа с базой... [FireBird 1.5]
serko © (2006-11-23 22:02:00)Здраствуте дорогие...
Я вот делаю сетевую базу для 11 клиентов. Ну т.е. есть сервер на котором эта база и стоит, ну а все пользователи по ходу своей работы добавляют инфу в базу...
Как сделать так чтобы при внесении изменений 1 клиентом, прошизошло обновление у всех остальных?
У меня пока получается так! На 2-х компа открыта одна и та же прога, на одном компе я добавил одну запись в базу... На втором компе ничего не обновиться пока не перезапустиш прогу.
Просветите меня плиз в этом вопросе...
mr.il (2006-12-22 10:39:00) [1]евентами не пользовался, но такое решение: Кнопка "обновить" задизейблена; Если получаем евент, делаем её енаблед; При нажатии кнопи, после отработки процедуры, делаем её снова дизаблед.
аноним (2006-12-22 05:54:00) [2]еще предложение - редактирование/вставка не в гриде, а в отдельной форме
по подтверждению - опционально можно обновить набор данных
кнопушку - "Обновить" тож можно предусмотреть - выключать после клика юзера, а включать по эвенту - надо будет - нажмет, не надо - его головная боль
serko (2006-12-21 22:01:00) [3]Уговорили! Спасибо вам ...
Sergey13 (2006-12-21 14:18:00) [4]> > но юзеры всё равно умудряются эту кнопку стабильно не
> нажимать.
Потому тут постоянно и говорят, что эта "проблема" обычно присутствует только в головах неопытных программистов.
pavel_guzhanov (2006-12-21 14:11:00) [5]
> но юзеры всё равно умудряются эту кнопку стабильно не нажимать.
> ...
так никто и не заставляет :0)) Просто если надо получить свежие данные, то нажмет...
Anatoly Podgoretsky (2006-12-21 13:39:00) [6]> Дмитрий Белькевич (21.12.2006 13:31:21) [21]
Да их право.
Дмитрий Белькевич (2006-12-21 13:31:00) [7]>Для получения обновленных данных я бы предусмотрел на форме кнопку, типа "обновить", чтобы юзер, если ему нужны обновленные данные, нажимал на нее, и получал их
+1
Пока ничего лучшего стабильно работающего не найдено.
p.s. но юзеры всё равно умудряются эту кнопку стабильно не нажимать....
Anatoly Podgoretsky (2006-12-21 12:23:00) [8]> pavel_guzhanov (21.12.2006 8:46:19) [19]
А нормальной системе такое происходит сотню раз в секунду.
pavel_guzhanov (2006-12-21 08:46:00) [9]
> Почему сразу смерти? Поясните...
это уже объяснено в
> Desdechado © (24.11.06 16:11) [10]
> 3. Если ивент будет срабатывать когда юзер что-то редактирует,
> он тебе голову оторвет. Особенно, если это происходит от
> каждого изменения большого кол-ва соседних пользователей.
>
попытаюсь объяснить попонятнее: Юзер просматривает данные. Находится где-то в середине или в конце таблицы. В это время другой юзер вносит данные в базу. После этого первый юзер вылетает из того места, где он был, получает обновленные данные и начинает искать ту строку, с которой он работал. И так каждый раз, после того, как кто-то внесет в базу какие-то данные.
Для получения обновленных данных я бы предусмотрел на форме кнопку, типа "обновить", чтобы юзер, если ему нужны обновленные данные, нажимал на нее, и получал их
Petr V. Abramov (2006-12-21 00:35:00) [10]> Проблему я описал в своем ВОПРОСЕ!
Вы описали в ВОПРОСЕ описали ПРОБЛЕМУ, которая возникла в процессе решения ЗАДАЧИ.
Не факт, что решение задачи связано с проблемой, которую Вы описали. Если ХОЧЕТСЯ проблему решить - никто ж не говорит, что труд - это некузяво
serko (2006-12-20 22:36:00) [11]
> Смерти клиентов хочешь?
Почему сразу смерти? Поясните...
> опишите задачу, и Вам подскажут, как сделать так, чтоб вопрос
> отпал сам собой
Проблему я описал в своем ВОПРОСЕ!
Petr V. Abramov (2006-12-20 00:06:00) [12]старая идея, через которую все проходят :)
но почему-то рынок за 20 лет на нее не отреагировал...
ответ такой - бросить эту затею, т.к. работа во-первых - может, во-вторых - оптимально быть организована таким образом, что это не надо.
опишите задачу, и Вам подскажут, как сделать так, чтоб вопрос отпал сам собой
Anatoly Podgoretsky (2006-12-19 23:57:00) [13]> serko (19.12.2006 23:49:14) [14]
Смерти клиентов хочешь?
serko (2006-12-19 23:49:00) [14]Ну у меня данные стали обновляться только при Open\Close...
А реально вообще сделать моментальное обновление данных у всех клиентов? Как?
Alexandr (2006-11-24 20:03:00) [15]тетрис заявок говоришь....
хм, зачотно
Anatoly Podgoretsky (2006-11-24 16:28:00) [16]> Desdechado (24.11.2006 16:11:10) [10]
Но последнее время много развелось желающих обновить.
Romkin (2006-11-24 16:18:00) [17]Да просто транзакции закривать надо!
У TIBTransaction хотя бы поставить AutoStopAction = saCommit, ну по минимуму! Транзакции на изменение - read committed, на чтение - см. как надо. И все будет работать
Desdechado (2006-11-24 16:11:00) [18]PEAKTOP © (24.11.06 10:44) [9]
Я б за такое кастрировал. Без шуток.
1. Подтверждение транзакции на афтерпост - дурость в большинстве случаев, ибо транзакция может состоять (и обычно состоит) из взаимоствязанных изменений разных датасетов.
2. Ивенты использовать имхо можно использовать только в программках-гляделках и то только одного вида - где ничегоне анализируют, а только отслеживают динамику. Типа тетриса заявок каких-нибудь.
3. Если ивент будет срабатывать когда юзер что-то редактирует, он тебе голову оторвет. Особенно, если это происходит от каждого изменения большого кол-ва соседних пользователей.
PEAKTOP (2006-11-24 10:44:00) [19]
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';
Бугага (2006-11-24 04:31:00) [20][6] Ну если он при перезапуске приложения изменения видит, то скорее всего [7]