Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при удалении записи

2.0K
26 ноября 2002 года
evasya
8 / / 23.11.2002
При удалении записи из Бд вылазит такое сообщение:

Project1.exe raised exception class ENoResultSet with message
'Error creating cursor handle'.

Я в обработчике события нажатия на кнопку(чтобы удалить запись) написал следующее:

AnsiString str1, str2;

str1 = DBGrid1->SelectedField->DataSet->FieldByName("date")->AsString;
str2 = DBGrid1->SelectedField->DataSet->FieldByName("id_brak")->AsInteger;

Query1->SQL->Clear();
Query1->SQL->Add("delete from tabl1 t where (t.\"date\" = \'"+str1+"\' )and(id_brak = "+str2+")");
Query1->ExecSQL();
Query1->Close();
Query1->Open();

при этом запись удаляется а ошибка фозникает, когда выполняется последняя строчка Query1->Open();

В чем же дело?
2.0K
26 ноября 2002 года
Tristan
27 / / 17.10.2002
??? Query1->Open();

"... Метод Open открывает соединение с базой ....Но этот метод применим только в том случае, если запрос сводится к оператору Select, если же запрос содержит другой оператор, например delete, то при выполнении Open будет генерироваться исключение."

А. Я. Архангельский "Язык SQL в C++Builder5"

Вот так...
И вообще непонятно, ведь запрос уже выполнен (ExecSQL), зачем его выполнять еще раз?
2.0K
26 ноября 2002 года
evasya
8 / / 23.11.2002
Мне нужно было вызвать Open(), чтобы потом в DBGrid отобразилось изменение...

Я уже нашел свою ошибку...
Не внимательно смотрел...Я забыл потом повторно записать в свойство SQL новый оператор

теперь код выглядит так:

AnsiString str1, str2;
str1 = DBGrid1->SelectedField->DataSet->FieldByName("date")->AsString;
str2 = DBGrid1->SelectedField->DataSet->FieldByName("id_brak")->AsInteger;

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("delete from tabl1 t where (t.\"date\" = \'"+str1+"\' )and(id_brak = "+str2+")");
Query1->Prepare();
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("select t.num, t.\"date\", t.id_brak, v.naim, t.brak from tabl1 t, vid_br v where (t.id_brak = v.id_brak)");
Query1->Open();

Прошу прощения за свою не внимательность...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог