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