Query->Close();
Query->SQL->Clear();
Query->SQL->Add( "SELECT [id] FROM Table1" );
try
{
Query->Open();
}
catch(...)
{
ShowMessage("Ошибка!");
}
Обработка ошибок при работе с базами данными
Код:
Городить такие конструкции неудобно и не красиво.
Может это можно сделать через обработку событий?
Код:
bool OpenQuery(TQuery *pQuery, AnsiString ErrorMsg)
{
try
{
pQuery->Open();
}
catch(...)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
return true;
}
{
try
{
pQuery->Open();
}
catch(...)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
return true;
}
Код:
Query->Close();
Query->SQL->Clear();
Query->SQL->Add( "SELECT [id] FROM Table1" );
OpenQuery(Query, "Ошибка!")
Query->SQL->Clear();
Query->SQL->Add( "SELECT [id] FROM Table1" );
OpenQuery(Query, "Ошибка!")
ROLpogo спасибо :)
Цитата: ROLpogo
Может так?
Код:
bool OpenQuery(TQuery *pQuery, AnsiString ErrorMsg)
{
try
{
pQuery->Open();
}
catch(...)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
return true;
}
{
try
{
pQuery->Open();
}
catch(...)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
return true;
}
Код:
Query->Close();
Query->SQL->Clear();
Query->SQL->Add( "SELECT [id] FROM Table1" );
OpenQuery(Query, "Ошибка!")
Query->SQL->Clear();
Query->SQL->Add( "SELECT [id] FROM Table1" );
OpenQuery(Query, "Ошибка!")
а что не судьба указать в catch() какой тип исключений перехватывать? например EDBEngineError...
а так код бессмысленный получается, что не случись "Ошибка"
Код:
void __fastcall TMain::QueryEditError(TDataSet *DataSet,
EDatabaseError *E, TDataAction &Action)
{
}
EDatabaseError *E, TDataAction &Action)
{
}
?
Query->ExecSQL();
Код:
bool OpenQuery(TQuery *pQuery, AnsiString ErrorMsg)
{
try
{
pQuery->Open();
}
catch(EDBEngineError)
{
try
{
Query->ExecSQL();
}catch(EDBEngineError)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
}
return true;
}
{
try
{
pQuery->Open();
}
catch(EDBEngineError)
{
try
{
Query->ExecSQL();
}catch(EDBEngineError)
{
ShowMessage(ErrorMsg.c_str());
return false;
}
}
return true;
}
примерно так. Мог где то ошибиться
Цитата: Tramp
А разве нельзя обрабатывать все ошибки вот тут
?
Код:
void __fastcall TMain::QueryEditError(TDataSet *DataSet,
EDatabaseError *E, TDataAction &Action)
{
}
EDatabaseError *E, TDataAction &Action)
{
}
?
Все нельзя, т.к. - Write an OnEditError event handler to handle exceptions that occur when an attempt to edit a record fails.
1. Обычно все библиотеки или компонеты определяют класс исключения (обычно определяют) где предусматривается № ошибки, сообщения о ошибке и т.п. полезная информация.
2. В "узких" местах (типа TQuery::Open) если вдруг, что не так - заявляется это исключение/исключения
3. В catch() - указывается какой тип исключеения ловить, а там можно вывести информацию о причине исключения
т.е. д.б. примерно так:
Код:
void OpenQuery(TQuery *pQuery)
{
try
{
pQuery->Open();
}
catch(EDBEngineError& e)
{
ShowMessage(e.Message); // сообщение о ошибке
}
}
{
try
{
pQuery->Open();
}
catch(EDBEngineError& e)
{
ShowMessage(e.Message); // сообщение о ошибке
}
}
ЗЫ: а если catch(...), то хватаются исключения любого типа