В Delphi XE я создаю клиент-серверное приложение с помощью мастера «DataSnap Server».
В ServerMethodUnit
Я определяю TSQLQuery
со свойством sql, например, «Выбрать * из ТАБЛИЦЫ»
Я также определяю функцию с именем ChangeSQL
в ServerMethodUnit
, что меняет свойство sql на примере SELECT * from TABLE where ID = 5
Когда я звоню ChangeSQL
из клиентского приложения через TSQLServerMethod
, функция ChangeSQL
измените свойство SQL
в ServerMethodUnit
, но когда оно покидает функцию ChangeSQL
, TSQLQuery
не содержит новую команду sql, но имеет исходный sql.
РЕДАКТИРОВАТЬ: Добавление образца кода
Я создаю новое клиент-серверное приложение с помощью мастера «DataSnap Server».
В ServerMethodsUnit
:
Я положил TSQLConnection
в свою базу данных.
Я положил TSQLQuery
вызов MyQuery
, с SQL
property = 'Выбрать * из клиента'
Я положил TDataSetProvider
до TSQLQuery
И определить функцию следующим образом:
function TServerMethods1.ClientFiltrer (ID:integer):integer;
begin
// --------------------------------------------- ---
// На этом этапе MyQuery.RecordCount = все записи (как в первый раз, так и после)
// ------------------------------------------------
if MyQuery.Active then
MyQuery.close;
MyQuery.SQL.Clear;
MyQuery.SQL.Add(' SELECT * from CLIENT where ID = '+StrToInt (ID));
MyQuery.Open;
result := MyQuery.RecordCount;
// ------------------------------------------------
// At this point, MyQuery.RecordCount = ONE record
// ------------------------------------------------
end;
И ТО
Я создаю новое приложение с помощью DataSnap CLient
В ClientModuleUni
:
Я поставил ClientDataSet
, названный MyClientDS
с RemoteServer
и ProviderName
моему MyQuery
провайдеру.
Я положил TSQLServerMethod
, называемый MyMethod
, указывающий на ClientFilter
в ServerMethodsUnit
в форме клиентского приложения
Затем я положил A DataSource
и DBGrid
на MyClientDs
и открыл его.
Я поставил Tbutton
с кодом OnClick
:
begin
MyClientDs .Close;
MyMethod .ParamByName('ID').Value := 5;
MyMethod .ExecuteMethod;
showmessage (MyMethod .ParamByName('ID').AsString);
// AT THIS POINT, returned value is ONE.
// I supposed that this Query had been filtered on
// the server and the client then show the filtered
// data, but it always shows the original query
MyClientDs .Close;
end;
В DBGrid
Я вижу все записи таблицы клиентов, ВСЕГДА.
Я пробую фильтр ClientTable
, нажимая на кнопку, но в DBGrid
всегда отображаются все записи.