Редактирование данных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Редактирование данных

Сообщение alexsa » 23.06.2011 17:18:42

Всем привет!
Объясните пожалуйста, как правильно построить код, чтобы Лазарус не ругался.

Код: Выделить всё
      if SQLQuery1.State in [dsEdit] then                                                           
      begin                                                                                         
          SQLQuery1.Close;                                                                         
          SQLQuery1.SQL.Text:='update groups set naimenovanie="'+EditNew.Text+'" where id_group=2';
          SQLQuery1.Open;
          SQLQuery1.Post;
...........................................
      end; 

SQLQuery1: Cannot open a non-select statement

Лазарус начинает ругаться на SQLQuery1.Open;
Когда я реализую этот запрос в той же базе только через броузер, где вместо "'+EditNew.Text+'" завожу данные, то все работает
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Редактирование данных

Сообщение Mr.Smart » 23.06.2011 17:31:23

Так вам ошибка "чёрным по белому" сообщает, что запрос не возвращает значения.
Для INSERT, UPDATE и другой подобной лобуде не возвращающей наборы данных, используйте метод SQLQuery1.ExecSQL.

ps В данном случае нет смысла проверять набор на режим редактирования. Тем более это SQL.

psps Дам совет: сначала почитайте мат.часть да и англицкий неплохо бы знать.

Добавлено спустя 1 минуту 30 секунд:
Да и метод Post тут совершенно неуместен т.к. SQL и все операции производятся на стороне сервера, а не в вашем наборе.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Редактирование данных

Сообщение Vadim » 23.06.2011 17:45:36

Ваша ошибка - в этом:
alexsa писал(а):SQLQuery1.Open;

Метод Open можно делать только для апросов, которые начинаются с волшебного слова SELECT.
Open - оначает "открыть набор данных". А набор данных образуется только после выборки данных, т.е. после SELECT. Во всех других случаях Вы пытаетесь открыть то, чего нет. Lazarus Вас правильно обругал. ;)
Делайте так:
Код: Выделить всё
SQLQuery1.ExecSQL;

и будет Вам щастье. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Редактирование данных

Сообщение alexsa » 23.06.2011 18:24:28

Код: Выделить всё
      begin                                                                                         
           SQLQuery1.Close;                                                                         
           SQLQuery1.SQL.Text:='update groups set naimenovanie="'+EditNew.Text+'" where id_group=2';
           SQLQuery1.ExecSQL;     
           SQLQuery1.ApplyUpdates;
           SQLTransaction1.Commit;


Теперь ругается, что dataset не активный..., уберешь SQLQuery1.Close; - ругается, что активный

Добавлено спустя 14 минут 11 секунд:
Re: Редактирование данных

Сообщение alexsa 23.06.2011 17:24:28

Код: Выделить всё
Код: Выделить всё
          begin                                                                                         
               SQLQuery1.Close;                                                                         
               SQLQuery1.SQL.Text:='update groups set naimenovanie="'+EditNew.Text+'" where id_group=2';
               SQLQuery1.ExecSQL;     
               SQLTransaction1.Commit;
          end;


Всем спасибо. Вот так теперь работает.

Добавлено спустя 20 минут 21 секунду:
Mr.Smart писал(а):psps Дам совет: сначала почитайте мат.часть да и англицкий неплохо бы знать.


Дайте ссылку на матчасть по этой теме... Да, а с заморским языком, действительно, проблема.. :D
Аватара пользователя
alexsa
новенький
 
Сообщения: 28
Зарегистрирован: 02.06.2011 23:10:20

Re: Редактирование данных

Сообщение gNEV » 28.06.2011 15:49:56

Я пишу так (Zeos):
Код: Выделить всё
with Query.SQL do
  begin
    Clear;
    Add('запрос');
  end;
Query.ExecSQL; или Query.Open в зависимости от необходимости
транзакции сначала открываются
Тырпыр.StartTransaction;
try
with Query.SQL do
  begin
    Clear;
    Add('запрос');
  end;
Query.ExecSQL;
тырпыр.Commit;
except
  тырпыр.Rollback;
  тут можно указать что транзакция не прошла.
end;
gNEV
новенький
 
Сообщения: 26
Зарегистрирован: 23.07.2010 14:20:06
Откуда: Санкт-Петербург

Re: Редактирование данных

Сообщение Vadim » 29.06.2011 08:07:29

alexsa писал(а):Дайте ссылку на матчасть по этой теме...

Любая книжка по Дельфи, где описывается работа с компонентами TQuery, ADO, InterBase... Всё, что в них описывается по работе с запросами, одинаково во всех компонентах.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 218

Рейтинг@Mail.ru