В данном посте продолжаем работать с технологией DataSnap не через провайдеры, а через TserverMethods…
Итак, если все подготовительные работы по созданию сервера и клиента проведены, то в данном посте попробуем удалить запись – DELETE- это одна из основных операций с базами данных.
Если нужно создать сервер с клиентом по технологии DataSnap, то можно воспользоваться вот этим постом.
Способ №1
Какой набор компонентов должен быть на сервере DataSnap?
Добавим SqlQuery, так как нам не нужно возвращать множество, а просто необходимо отправить запрос на выполнение инструкций на СУБД…
Настроим свойство SQLConnection…
Также напишем функцию следующего вида модуле методов сервера…
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TServerMethods1.MyTableDelete(PK_parameter: integer); begin with sqlquery1 do begin sqlconnection:=sqlconnection1; sql.Clear; sql.Add('delete from mytable'); sql.Add('where primary_key=:PK_parameter '); params[0].Value:=PK_parameter; ExecSQL; end; end; |
Что нужно сделать на клиенте DataSnap?
Запустим сервер
Выключим и включим SQLConnection1 (если не сделать – возникнет ошибка на следующем шаге)
Обновим классы методов сервера на клиенте
Добавим ещё один компонент sqlServermethods, а также кнопку Insert и поле Edit…
У компонента SqlServerMethods2 сделаем следующие настройки… – заполним поле SQLConnection и ServerMethodName… Для последнего – выберем из выпадающего списка – тот метод, который мы создали на сервере.
P.S. Если вы добавили новый метод на сервере, а в списке его не видно – просто удалите компонент и проделайте все действия заново…
На кнопку Delete повесим следующий код
1 2 3 4 5 6 7 8 9 10 11 12 13 |
procedure TForm2.Button4Click(Sender: TObject); begin sqlservermethod2.ServerMethodName:='TServerMethods1.MyTableDelete'; sqlservermethod2.Params.ParamByName('PK_Parameter').Value:=dbgrid1.DataSource.DataSet.RecNo+1; sqlservermethod2.ExecuteMethod; // Обновляем множество на клиенте... sqlconnection1.Connected:=false; sqlconnection1.Connected:=true; clientdataset1.Close; Clientdataset1.Open; end; |
Способ №2
На мой взгляд более элегантный, простой и понятный. На сервере все тоже самое, а вот на клиенте на кнопку вешаем другое событие…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TForm2.Button2Click(Sender: TObject); var SMC:TServerMethods1Client; begin //Создаем переменную серверного типа и запускаем процедуру вставки... SMC:=TServerMethods1Client.Create(SQLConnection1.DBXConnection); SMC.MyTableDelete(clientdataset1.RecordCount+2); SMC.Free; //Обновляем множество sqlconnection1.Connected:=false; sqlconnection1.Connected:=true; clientdataset1.Close; Clientdataset1.Open; end; |