Delphi.Datasnap. Провайдеры. Как удалить запись (delete)?

В данном посте будем учиться удалять записи Delete. Для этого нужно провести подготовительную работу на сервере, обновить класс методов сервера у клиента, и вызывать соответствующие методы со стороны клиента. Всего существует 3 способа –

Через TServerMethods. На мой взгляд менее удобный в смысле трудоемкости (особенно для select). Нет зависимости от COM. (Рассмотрим в других постах, так как надо будет менять набор компонентов)

Через провайдеры и прямую отправку SQL запросов. На мой взгляд более удобный – менее трудоемкий. Есть зависимость от COM. (Рассмотрим здесь)

Через провайдеры и методы ClientDataSet  – (Insert, Edit, Delete) Самый легкий способ.(Рассмотрим здесь)

В данном посте рассмотрю только  способы – через провайдеры как более простой и удобный на мой взгляд. Новый способ рассмотрю в других постах.

DELETE через провайдеры и прямую отправку SQL запросов

Какие компоненты используем на сервере?

В методах сервера выставляем такие компоненты…

4

 

Какие методы нужно добавить на сервере?

В разделе public TServerMethods1 добавляем

Далее пишем реализации

Какие компоненты используем на клиенте?

3

 

(справа DBGrid1)

Создаем новую кнопку

6

И добавляем на неё такой код…

Тестируем… Все работает…

Важный момент

Пара комментариев по поводу кода. Поскольку в инструкции нам нужен текущий номер записи, то нужно его прочитать из dbgrid. Именно из dbgrid – это важно. Потому что в ключевом поле СУБД записи автоинкрементны. И если, скажем, мы удаляем 18-ю запись, то 19-я запись 18-й не становится. Она остается 19-й. В результате, у нас получается ряд …16,17,19…. поэтому читать важно именно из Dbgrid.

Если читать запись таким образом..

Clientdataset1.RecNO

то мы поставим указатель мыши в нашем клиентском приложении на 19 запись, а на самом деле она окажется 18-й, потому что, похоже метод RecNO считает записи по порядку, а нам нужно так как отображено в базе (СУБД), а это не всегда будет совпадать.

Delete через ClientDataSet1.delete

Какие изменения в данном случае?

В методах сервера, у компонента DataSetProvider1 пишем название таблицы с которой будем работать…

Иначе система будет ошибаться. Если меняем таблицу, с которой будем работать – здесь её тоже нужно поменять.

Меняем обработчик на кнопке Delete…

 

This entry was posted in DataSnap, Delphi. Bookmark the permalink.