В данном посте будем учиться вставлять записи Insert. Для этого нужно провести подготовительную работу на сервере, обновить класс методов сервера у клиента, и вызывать соответствующие методы со стороны клиента. Всего существует 3 способа –
Через TServerMethods. На мой взгляд менее удобный в смысле трудоемкости (особенно для select). Нет зависимости от COM. (Рассмотрим в других постах, так как надо будет менять набор компонентов)
Через провайдеры и прямую отправку SQL запросов. На мой взгляд более удобный – менее трудоемкий. Есть зависимость от COM. (Рассмотрим здесь)
Через провайдеры и методы ClientDataSet – (Insert, Edit, Delete) Самый легкий способ.(Рассмотрим здесь)
В данном посте рассмотрю только способы – через провайдеры как более простой и удобный на мой взгляд. Новый способ рассмотрю в других постах.
В принципе, кардинально ничего не меняется по сравнению с выборкой – просто меняем текст запроса и создаем пару дополнительных методов на сервере.
INSERT через провайдеры и прямую отправку SQL запросов
Какие компоненты используем на сервере?
В методах сервера выставляем такие компоненты…
Какие методы нужно добавить на сервере?
В разделе public TServerMethods1 добавляем
1 2 3 |
procedure Sqlquery_SQL_Add(text:string); procedure Sqlquery_SQL_clear; procedure Sqlquery_ExecSQL; |
Далее пишем реализации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TServerMethods1.Sqlquery_SQL_Add(text: string); begin sqlquery.SQL.Add(text); end; procedure TServerMethods1.Sqlquery_SQL_clear; begin sqlquery.SQL.Clear; end; procedure TServerMethods1.Sqlquery_ExecSQL; begin sqlquery.ExecSQL; end; |
Какие компоненты используем на клиенте?
(справа DBGrid1)
Создаем новую кнопку
И добавляем на неё такой код…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure TForm1.Button2Click(Sender: TObject); var smc: TServerMethods1Client; begin smc := TServerMethods1Client.Create(Sqlconnection1.DBXConnection); try smc.Sqlquery_SQL_clear; smc.Sqlquery_SQL_add('insert into mytable(primary_key,myfield) values(' + inttostr(Clientdataset.RecordCount + 1) + ',''NewRecord'')'); smc.Sqlquery_ExecSQL; smc.Sqlquery_SQL_clear; smc.Sqlquery_SQL_add('select * from mytable'); Clientdataset.Close; Clientdataset.Open; finally smc.Free; end; end; |
Тестируем… Все работает…
INSERT через Clientdataset.Insert
Какие изменения в данном случае?
В методах сервера, у компонента DataSetProvider1 пишем название таблицы с которой будем работать…
1 2 3 4 5 |
procedure TServerMethods1.DataSetProvider1GetTableName(Sender: TObject; DataSet: TDataSet; var TableName: string); begin TableName:='MyTable'; end; |
Иначе система будет ошибаться. Если меняем таблицу, с которой будем работать – здесь её тоже нужно поменять.
Меняем обработчик на кнопке Insert…
1 2 3 4 5 6 7 8 9 |
procedure TForm1.Button2Click(Sender: TObject); begin Clientdataset.Insert; Clientdataset.FieldByName('Primary_key').AsInteger := Clientdataset1.RecordCount + 2; Clientdataset1.FieldByName('myfield').AsString := 'MyNewRecord'; Clientdataset1.Post; Clientdataset1.ApplyUpdates(-1); ClientDataset1.Refresh; end; |