Ошибка при удалении записи
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();
В чем же дело?
"... Метод Open открывает соединение с базой ....Но этот метод применим только в том случае, если запрос сводится к оператору Select, если же запрос содержит другой оператор, например delete, то при выполнении Open будет генерироваться исключение."
А. Я. Архангельский "Язык SQL в C++Builder5"
Вот так...
И вообще непонятно, ведь запрос уже выполнен (ExecSQL), зачем его выполнять еще раз?
Я уже нашел свою ошибку...
Не внимательно смотрел...Я забыл потом повторно записать в свойство 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();
Прошу прощения за свою не внимательность...