powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с кэшированными данными
6 сообщений из 6, страница 1 из 1
Работа с кэшированными данными
    #32166303
HELLOWEEN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, может кто подскажет основные принципы (заповеди из личного опыта) работы с кэшированными данными - кто с какими проблемами сталкивался?.

1) Вот, например, нужно ли использовать транзакции при внесении изменений в записи (или добавлении записи) в базу (перед IBQuery.ApplyUpates)?

вот пример из документации к IB (раздел Developers Guide / working with Cashed Updates):

...
procedure TForm1.ApplyButtonClick(Sender: TObject)
begin
IBTransaction1.StartTransaction;
CustomerQuery.ApplyUpdates;
IBTransaction1.Commit;
except
IBTransaction1.Rollback;
raise;
end;
CustomerQuery.CommitUpdates;
end;
...

Либо я плохо знаю Delphi - либо здесь не хватает "try"?
Также ни у одного элемента IB Я не нашел - CommitUpdates :(
у кого элемента есть CommitUpdates?

2) Все-б хорошо - но при внесении изменений в БД на одной из клиентских машин - на других клиентах никаких изменений сразу не отобразится, пока заново не произведешь Close/Open... как можно автоматизировать этот процесс? Может поставить на форму таймер? Пусть набор данных обновляется по времени?... хотя это както не логично...

Всем заранее спасибо
...
Рейтинг: 0 / 0
Работа с кэшированными данными
    #32166333
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На ibase.ru есть подборка статей на твои вопросы, специально для тебя пдобрали :-).
...
Рейтинг: 0 / 0
Работа с кэшированными данными
    #32166704
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно, лучшее решение для обновления инфы на клиентах - использовать SuperIBEventer (в IBPlus). Для этого надо только соответсвующие триггеры в базе прописать на изменение/вставку/удаление и все.
Таким образом можно даже чаты делать :)

З.Ы. у меня вся эта хрень работает под всеми виндами только окромя Win XP - там ивентер наотрез отказывается работать :(
В чем косяк пока не разобрался ...
...
Рейтинг: 0 / 0
Работа с кэшированными данными
    #32167328
Привет!

Код: plaintext
1.
Обычно, лучшее решение для обновления инфы на клиентах - использовать SuperIBEventer (в IBPlus). Для этого надо только соответсвующие триггеры в базе прописать на изменение/вставку/удаление и все. 


Чаты как задача еще туда-сюда, но обычные приложения в 99% случаев не нужно и вредно завязывать на использование Events и обновлений с сервера.

Во-первых, события работают нестабильно в разных сетевых средах (2 сетевые карты, запреты портов, etc), во-вторых, логика клиент-серверных приложений должна стремиться к тому, что КЛИЕНТ запрашивает сервер о каких-то изменениях, а не СЕРВЕР сообщает клиенту.

WBR,
Alexey
PS Чаты на базе Интербейз - редкий и особо извратный случай изобретения велосипеда, пригодный только для LAN.
...
Рейтинг: 0 / 0
Работа с кэшированными данными
    #32169929
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Алексею Ковязину:
>>логика клиент-серверных приложений должна стремиться к тому, что КЛИЕНТ запрашивает сервер о каких-то изменениях, а не СЕРВЕР сообщает клиенту

А как КЛИЕНТ узнает, когда ему запрашивать изменения. Тем более если данные читаются 2-3 секунды...
Мне, например, в большинстве программ нужно, чтобы у всех пользователей изменения других сразу же отображались (и желательно чтоб курсор в табличке не сдвигался). Все это работает на Events.

А как по другому? Подскажите, очень интересно.

З.Ы. предложения типа: запросы по таймеру или кнопочка "Обновить" - в данном случае вызывают оскомину...
...
Рейтинг: 0 / 0
Работа с кэшированными данными
    #32194260
На самом деле, это СЕРЬЕЗНАЯ проблема.
Я хочу, чтобы у всех клиентов мгновенно обновлялись наборы данных (FIBDataSet). Как мне это сделать никак не могу придумать.
Хотя есть один вариант - в триггере создавать событие на вставку, удаление или редактирование записи и событие передавать в приложение, там его ловить с помощью Eventera и вставлять через CacheAppend в DataSet. Только вот беда: КАК мне передать в событии КАКИЕ именно нужно записи редактировать???? Ведь в событии нельзя передать произвольный текст (к примеру с ID записи) - текст события статичен и должен быть заранее зарегистрирован клиентом. Получается я знаю что изменение произошло и что надо обновить, а что именно обновлять - как передать в клиент????
Если кто знает как решить эту проблему - РАССКАЖИТЕ ПОЖАЛУЙСТА)

заранее благодарен
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа с кэшированными данными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]