Проблемы с Delphi XE2, DataSnap и полем поиска - PullRequest
1 голос
/ 01 февраля 2012

У меня есть небольшая проблема здесь. Я создал поле поиска на своем сервере приложений, используя технологию Delphi XE2 DataSnap. На стороне клиента это поле становится TStringField. Теперь проблема в том, что я теряю функциональность поиска на стороне клиента. Кроме того, я не могу изменить строковое поле на стороне клиента, поскольку оно доступно только для чтения (даже если я вручную отключаю свойство только для чтения).

Я не хочу искать таблицы на стороне клиента, потому что я не хочу, чтобы все данные, загруженные на моей стороне клиента, просто поддерживали поиск.

Я могу изменить значение поля Key, но текст поиска строкового поля не изменится, если я не применю обновления и не перезагружаю данные.

Пользователи хотят видеть изменение текста.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Давным-давно я столкнулся с этой проблемой и нашел решение, которое немного сложно проанализировать, но я постараюсь дать некоторые рекомендации, пока у меня не будет времени написать подробный пост в блоге. Идея состоит из информации (касающейся полей поиска, таких как свойства полей, наборы данных, поставщики), упакованных поставщиком как необязательные параметры на стороне сервера. На стороне клиента производное TClientDataset может распаковывать и обрабатывать эту информацию, создавать на лету клиентские наборы данных, которые извлекают необходимые поисковые наборы данных и настраивают соответствующие поля поиска. Этот процесс прозрачен благодаря встроенной функциональности в производном классе набора данных клиента, и единственное, что нужно помнить, - это создать эту информацию в событии OnGetDatasetProperties провайдера и установить значение false для всех флагов провайдера в полях поиска.

0 голосов
/ 02 февраля 2012

Кажется, вам нужно проверить функциональность вашего графического интерфейса: поля поиска действительно являются функцией на стороне клиента. И ему нужен источник поиска - поэтому, чтобы использовать его на клиенте, таблица поиска должна быть загружена. Ребята из DataSnap очень хороши здесь, преобразовывая его в TStringField при передаче его клиенту ... Я бы просто проигнорировал это.

Таким образом, если таблица поиска такая большая, вам не следует использовать поля поиска, а искать пользовательские интерфейсы - или автозаполнять комбинированные списки, которые вы выполняете на сервере DataSnap. Возможно, вам придется кодировать его вручную в случае со списком, я не знаю (посмотрите, есть ли в JVCL что-то, что вы можете использовать для быстрого доступа к пути).

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

...