C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Отлавливание специфических ошибок ADO, Отлавливание специфических ошибок ADO
aleX_SAS_
  Отправлено: 08.09.2004, 13:59


Не зарегистрирован







Отлавливание специфических ошибок ADO
компилятор c++ builder 6.0
на форме лежит ADOConnection,DataSource1, ADOQuery, и ADOCommand

существует код для вставки определенных данных в Оракловские таблицы:

AnsiString SQ = Edit1->Text;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQ);
ADOQuery1->ExecSQL();

по одной кнопке, и

AnsiString SQ = Edit1->Text;
ADOCommand1->CommandText = SQ;
ADOCommand1->Execute();

по другой

на onExecuteComplete висит обработчик:

Memo1->Lines->Add(IntToStr(RecordsAffected));
switch (EventStatus){
esOK: logOut("esOK");break;
esErrorsOccured:logOut("esErrorsOccured");break;
esCantDeny:logOut("esCantDeny");break;
esCancel:logOut("esCancel");break;
esUnwantedEvent:logOut("esUnwantedEvent");break;
};

плюс к тому висит обработчик Эксепшнов

void __fastcall TForm1::onExeptionHandle(TObject *Sender, Exception *E)
{
AnsiString errCode;
errCode = (AnsiString(E->ClassName())+" !!!-> "+ E->Message);
logOut("err: "+errCode);
}

TForm1::logOut(AnsiString mess)
{
Memo1->Lines->Add(mess);
}


void __fastcall TForm1::onCreateForm(TObject *Sender)
{
Application->OnException = onExeptionHandle;
}


В общем, жизнь прекрасна

Екзерсис первый:

в edit1 — insert into zu (kn,knr) values (11,55)
реакция и по Command и по Query идентичнa
-1 -- recordAffected
esOK -- event status
err: EOleException !!!-> ORA-00942: table or view does not exist

в общем то что и требовалось доказать, добавляем имя схемы:

Екзерсис второй:

insert into RAGZK.zu (kn,knr) values (11,55)
-1
esOK
err: EOleException !!!-> ORA-20282: Неправильный кад. номер
ORA-06512: at "RAGZK.ZU_BEF_INS", line 15
ORA-04088: error during execution of trigger 'RAGZK.ZU_BEF_INS'

поймали, сработал триггер, полет нормальный...

Екзерсис третий:

insert into RAGZK.zu ( SQF, DELIM, KNR, KN, KDKV_KNR) values ( '4,5', '0', 288, 268, 288)

0
esOK -- !!!!!!!!

ноль записей вставлено, состояние ок, почему?
стартуем SQL*plus, подсовываем ту же строку,

SQL> insert into RAGZK.zu ( SQF, DELIM, KNR, KN, KDKV_KNR) values ( '4,5', '0', 288, 268, 288)
2
SQL> /
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "RAGZK.ZU_BEF_INS", line 23
ORA-04088: error during execution of trigger 'RAGZK.ZU_BEF_INS'

вуаля, сработал тот-же триггер, но возврата никакого.
Внимание, вопрос, откуда можно выдернуть информацию о результате прохождения определенной команды?
Сие требуется для генерации лога, и чем детальнее информация, тем лучше.
Заранее благодарствую.
P.S. сорри за большую длину послания

Вернуться в Работа с базами данных в C++Builder