• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема с Clientdataset

  • Автор темы pashAkka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

pashAkka

Всем доброго времени суток!

Изучаю трехуровневую архитектуру. Написал пока простенькое приложение с такой структурой:

ASA 8 <-> ADO <-> Сервер приложения (удаленный модуль данных) <-> Socket-соединение <-> Тонкий клиент.

На тонком клиенте используются компоненты ClientDataSet.

Ситуация такая:
- делаю изменения на стороне тонкого клиента,
- потом вызываю ApplyUpdates(0) компонента ClientDataSet,
- изменения отображаются и у клиента и в базе данных,
но стоит мне вызвать Close, а потом Open у ClientDataSet, то этих обновлений не видно!

Также происходит, если я например напрямую в базе ручками что-то поменяю, то у клиента этих изменений не видно, причем не помогает ни UpdateCursorPos, ни Resync([]), ни Refresh. Помогает только перевход в программу.

Вот фрагмент кода с комментариями:
Код:
 // вносим изменения в CDS и применяим их
ClientDataSet1.ApplyUpdates(0);
// тут изменения видны как у клиента, так и в БД

ClientDataSet1.UpdateCursorPos;
ClientDataSet1.Resync([]);
// после этого тоже видны (взято из примера, но смысла не пойму, т.к. 
// видимых изменений не происходит)

ClientDataSet1.Close;

ClientDataSet1.Open;
// вот тут уже изменеий нет, видим то, что было до модификации!

// становимся на модифицированную запись и выполняем следующие 
// комманды
ClientDataSet1.RefreshRecord;
ClientDataSet1.UpdateCursorPos;
ClientDataSet1.Resync([]);
// результата нет, запись остается в старом виде :(

Если кто имел дело с этим, может поможете. Кстати проверил это без сервера приложений, с локальным модулем данных - вышла такая же ситуация.

Заранее спасибо за ответы
 
P

pashAkka

Огромное всем спасибо за ответы! :)

Почитал умные книжки и разобрался сам. :(

Оказывается, интерфейс IAppServer, наследником которого является интерфейс, который реализует мой удаленный модуль данных, имеет тип stateless. Поэтому каждый раз, перед вызовом метода AS_GetRecords, нужно обновлять набор данных клиента.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!