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