2012-05-06 7 views
3

Я задавал себе вопрос о том, как фильтровать содержимое ClientDataSet в DataSnap архитектуре 3 яруса: Oracle DB <=> My Datasnap Server <=> My Datasnap clientsДинамически фильтрация ClientDataSet содержания

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

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

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

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

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

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

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

Привет, JP

ответ

2

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

+0

Спасибо Uwe за указание на эту статью. – JPR

0

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

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

Смежные вопросы