В данном посте продолжаем работать с технологией DataSnap не через провайдеры, а через TserverMethods…
Итак, если все подготовительные работы по созданию сервера и клиента проведены, то в данном посте попробуем сделать выборку – select – одну из основных операций с базами данных.
Если нужно создать сервер с клиентом по технологии DataSnap, то можно воспользоваться вот этим постом.
Какой набор компонентов нужен на сервере?
В методах сервера…
Что нужно сделать на сервере DataSnap?
В методах сервера напишем такую процедуру…
1 2 3 4 5 6 |
procedure TServerMethods1.ServerSelect(text: string); begin sqldataset1.Active:=false; sqldataset1.CommandText:=text; sqldataset1.Active:=true; end; |
Какой набор компонентов нужен на клиенте DataSnap?
Что нужно сделать на клиенте DataSnap?
Обновим классы сервера на клиенте (правой кнопкой мыши на SQLConnection на клиенте…)
Далее, добавим кнопку…
И напишем для неё такой обработчик…
1 2 3 4 5 6 7 8 9 10 11 |
procedure TForm2.Button1Click(Sender: TObject); var SMC:TServerMethods1Client; begin //Меняем запрос на сервере... SMC:=TServerMethods1Client.Create(Sqlconnection1.DBXConnection); SMC.ServerSelect('select*from mytable where primary_key>4'); SMC.Free; // Обновляем множество... Clientdataset1.Close; Clientdataset1.Open; |
Тестируем… запускаем сервер, потом клиент…
Select работает…
Думаю, можно и другим способом – создать дополнительный серверный метод с параметрами, и параметры обновлять на клиенте (будем рассматривать этот метод в последующих постах), но, на мой взгляд это крайне неудобно.
Почему?
Скажем, мы создали на сервере метод, который обрабатывает select таким образом…
1 |
select * from mytable where primary_key> :parametr_primary_key |
И это все хорошо будет работать до тех пор, пока нам просто надо будет подставлять разные значения параметров. Но возникнет ситуация, когда надо будет поменять саму форму запроса, скажем использовать like или что-то другое…. И что тогда?
-Нужно будет менять запрос на сервере
-Обновлять классы на клиенте
-Обновлять значения параметров на клиенте
…возможно, что-то ещё…
Даже уже этого достаточно, чтобы усложнить себе жизнь. Поэтому, я думаю, для запроса select лучше использовать тот метод, который я описал выше. Возможно, я ошибаюсь, и изменю свое мнение в будущем, но пока что я думаю так.