-
Имеется несколько одинаковых удаленных клиентов на SocketConnection+ClientDataSet, которые подключаются к одной и той же таблице одной и той же базы. Сервер доступа к базе на SQLConnection. При редактировании данных и вызова ApplyUpdate(-1) одним клиентом на других ClientDataSet автоматически почему-то не обновляется. Есть ли простое и красивое решение автоматического обновления?
-
> При редактировании данных и вызова ApplyUpdate(-1) одним > клиентом на других ClientDataSet автоматически почему-то > не обновляется.
А должен? > Есть ли простое и красивое решение автоматического обновления?
Большинство считает автоматическое обновление весьма "некошерным". См. например тут http://pda.delphimaster.net/?id=1313671934&n=1Хотя зависит от конкретной задачи.
-
> на других ClientDataSet автоматически почему-то не обновляется.
И не должно.
-
Хорошо, пусть не должно. Но ведь тогда должен существовать какой-то способ оповестить всех остальных об изменениях в БД чтобы сделать Refresh. Что за способ?
-
> оповестить всех остальных об изменениях в БД чтобы сделать > Refresh
а смысл?
-
Например, кто-то изменяет конфигурацию системы, которая отражается в компоненте TreeView клиента. То другие клиенты должны работать с актуальной информацией в своих TreeView. Например, первый клиент удалил какой-то элемент из TreeView, а второй пытается его редактировать, а третий вообще питается считать его состояние. Как же без CDS.Refresh? Ведь только после его вызова содержание набора данных можно считать действительным, а не устаревшим.
Поясняю, что по системой понимается система управления чего либо состоящая и многочисленных и различных компонент (железок ,компьютеров и датчиков)
-
А например, клиент отошел, ( а если еще + подключается через сотового, платит за трафик.) И подошел через пол-дня. Зачем ему траффик за пол-дня видеть?
или вот
>> Например, первый клиент удалил какой-то элемент из TreeView, второй обновил, >> пытается его редактировать, нажал Ok.
А третий, нажал удалить, но на долю-секунды раньше. И как быть?
А просто - изменения второго не принимаются, с ответом, что то, что ты хочешь изменить - более не существует, возможно было удалено.
-
> Например, кто-то изменяет конфигурацию системы, которая > отражается в компоненте TreeView клиента. То другие клиенты > должны работать с актуальной информацией в своих TreeView. > > Например, первый клиент удалил какой-то элемент из TreeView, > а второй пытается его редактировать, а третий вообще питается > считать его состояние.
Вот, длинное обсуждение. Не поленись и прочитай до конца. При этом обдумай внимательно. http://pda.delphimaster.net/?n=3&id=1326056648&p=1Кстати, также имеет смысл заодно вот это прочитать, это не совсем по теме, но наверняка у тебя аналогичная "хотелка" возникнет. тоже не поленись, прочитай. http://pda.delphimaster.net/?n=18&id=1323259560&p=1
-
> Поясняю, что по системой понимается система управления чего > либо состоящая и многочисленных и различных компонент (железок > ,компьютеров и датчиков)
Ну конечно. Такие задачи нужно решать только через использование БД! БД ведь всё сама умеет :)
-
> Поясняю, что по системой понимается система управления чего > либо состоящая и многочисленных и различных компонент (железок > ,компьютеров и датчиков)
БД является хранилищем данных. Которая отдаёт данные по запросу. Спросил - получил. Не спросил - не получил. Есть конечно всякие искусственные свистелки-перделки, позволяющие нотифицировать кого-либо по факту изменения данных, но они: 1. Отнюдь не универсальные 2. Имеют массу ограничений 3. Как правило весьма ресурсоёмкие 4. Поддерживаются далеко не всеми СУБД, ибо в стандарте такого нет.
-
> Поясняю, что по системой понимается система управления чего > либо состоящая и многочисленных и различных компонент (железок > ,компьютеров и датчиков)
Стоит что-нибудь почитать о трехзвенной архитектуре.
-
Клиент с ClientDataSet как раз и является клиентским ПО в 3-х трехзвенке.
Почитав предложенное, подумав пришел к тому что: 1. необходимость автообновления ClientDataSet это индивидуально (зависит от задачи) 2. обновлять лучше по событию, для этого изменяющий запись в БД или сервер доступа к данным должен позаботиться об оповещении остальных клиентов по поводу изменения в БД. 3. Метод оповещения клиентов - любой, какой устроит (с помощью SocketServer, либо обратных вызовов сервером доступа к данным, и т.д.)
В моем случае сложность только в том, что данные в клиенте (принял решение) хранятся не ClientDataSet, а копируются в переменные, на которые указывают элементы TreeView, чем и обуславливаются некоторое трудности обновления и редактирования данных. TreeView - требование ТЗ. Нормального конвертера TreeView <> Набор Данных не нашел.
Всем СПАСИБО!
-
> Нормального конвертера TreeView <> Набор Данных не нашел.
Напиши свой, в чём проблема? ИМХО, все TDBTreeView писали :)
-
-
Удалено модератором
|