Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Одновременная работа с базой... [FireBird 1.5]


Страницы:   1 2

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]


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо