Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1172564671
Radgar
2007-02-27 11:24
2007.03.18
OnKeyDown


1-1169504829
Дмитрий Белькевич
2007-01-23 01:27
2007.03.18
Насколько верен следующий код завершения программы:


3-1167039441
novill
2006-12-25 12:37
2007.03.18
IB 7.5 Напомните синтаксис использования функции в UPDATE запросе


1-1169148459
VEZ
2007-01-18 22:27
2007.03.18
Action Dropdown ToolButton


15-1172213086
PARUS
2007-02-23 09:44
2007.03.18
23





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский