Динамическая фильтрация содержимого набора клиентских данных

Я задаю себе вопрос о способе фильтрации содержимого клиентского набора данных в трехуровневой архитектуре привязки данных: Oracle DB <=> My Datasnap Server <=> My Datasnap clients

У меня есть таблица Oracle, доступная через TDSProviderConnection и _ 3_.

Несколько клиентов используют набор данных, который содержит поле с именем "clientId". Я хотел бы, чтобы каждый клиент запрашивал только свои строки (как WHERE clientId = 'Client1' в операторе sql).

Если я правильно понял, использование фильтра не снижает накладные расходы.

myclientdataset.Filter:= 'ClientId = Client1';
myclientdataset.Filtered:= true;

Поскольку это все равно передают клиенту. Я хочу, чтобы сервер отфильтровывал отправленные сообщения.

Но я понятия не имею, как этого добиться с помощью этих компонентов.

Любая идея будет принята с благодарностью.

С уважением, JP


person JPR    schedule 06.05.2012    source источник


Ответы (2)


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

person Uwe Raabe    schedule 06.05.2012

Свойство Filter фильтрует содержимое, загруженное в ClientDataSet. Это не влияет на данные, которые вы извлекаете из базовой базы данных.

Чтобы ClientDataSet влиял на данные, полученные из базовой реляционной базы данных, вы можете либо указать запрос в свойстве CommandText, либо включить параметризованный запрос (или вызов хранимой процедуры) в свойстве CommandText, а затем использовать свойство Params для определения значений. ваших параметров.

person Cary Jensen    schedule 23.03.2013