Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Одновременная работа с базой...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.045 c
15-1171859456
Каспер
2007-02-19 07:30
2007.03.18
copy для сотового


10-1130594049
sanich__
2005-10-29 17:54
2007.03.18
AcroPDF


15-1171983055
Axis_of_Evil
2007-02-20 17:50
2007.03.18
о сканере


2-1172510704
ezorcist
2007-02-26 20:25
2007.03.18
Незавершающееся консольное приложение.


15-1172077975
Илья84
2007-02-21 20:12
2007.03.18
Перенос Delphi на другой ПК