Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > TADOConnection & RAISERROR MSSQL


Автор: np9mi7 8.4.2005, 07:38
(копия темы: http://forum.vingrad.ru/index.php?showtopic=46960)

Добрый день.
В качестве интерфейса к БД был выбран ADO (вернее ADO Express)... бизнес логика опущена на сервер DB.... Тут возник вопрос, при генерации ошибок сервером (RAISERROR @err @msg) мне хочеться на клиенте получить информацию об ошибке...

Где храниться RAISERROR с сервака???


Заранее благодарен за помощь. smile

Мне критичен именно код, а не сообщение его можно из EOleException:: __property Message. Где взять КОД smile

есть предложение сообщение править, но что-то не охото, хочеться красиво, те стандартными средствами, наверника можно посмотреть.
(
т.е. договориться что сервер генерирует сообщения вида RAISERROR @err_code, [CODE_INTEGER] + @msg
те передавать код в первой позиции сообщения, а потом выдерать его

Код

try
{
}
catch(EOleException& ex)
{
       long int i;
       i = ex.Message->SubString(1,10).toInt(); // договориться что на сервере 
                                                                         // все сообщения так начинаются
}

но это убого, хочеться стандартными средствами.

TADOConnection:: __property Errors{/**/}; написано что там все храниться (ошибки). Блин, как получить код последней, которую сгенерировал сервер smile

Заранее благодарен за помощь.

ps. администраторам, простите за копирование темы smile просто очень хочеться получить ответ.

Автор: np9mi7 8.4.2005, 12:25
Я разобрался.
Код

//----------------------------------
_di_Errors        errCollection;
_di_Error        errSingle;
unsigned int    iCount;
long            SQL_RAISERROR_CODE;                    // непосредственно код ошибки
//----------------------------------
errCollection = ADOConnection1->Errors;                // получаем коллекцию
errCollection->Get_Count(iCount)                    // получаем число ошибок
errCollection->Get_Item(iCount,errSingle);                            // получаем последнюю ошибку
errSingle->Get_NativeError(SQL_RAISERROR_CODE);        // код от RAISERROR - а у вас в кормане :-)
//----------------------------------

Теперь код в SQL_RAISERROR_CODE.
Всем спасибо, а вот этот примерчик можно и в FAQ smile

RAISERROR это не шутки!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)