|
|
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Пишу следующий код (примерно): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Запускаю - все замечательно. Но предположим, что хп с именем sp_Any_Procedure не существует, тогда CDatabase "ругается" в виде еррор меседжа (что мне абсолютно не надо), т.е. никогда не происходит исключения, которое я могу обработать (а именно ничего не делать). Подскажите как побороть этот еррор меседж? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 11:57 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Врёшь ты всё. Написал, точно такой код, всё работает. (драйвер MSAccess) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 12:19 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
К сожалению, не вру :( У меня: 1. Сервер: MS SQL Server 2. Источник ODBC: System DSN (my_odbc) Возможно с MSAccess работает. Хотя я сомневаюсь, т.к. в ExecuteSQL вызывается AFX_ODBC_CALL с последующим AfxThrowDBException, который в свою очередб обрабатывается в wincore.cpp: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. так вот, функция AfxProcessWndProcException отображает месадж, который мне не нужен. А до моего обработчика вообще никогда ошибка не "доходит". Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 13:06 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
kxmepПишу следующий код (примерно): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Запускаю - все замечательно. Но предположим, что хп с именем sp_Any_Procedure не существует, тогда CDatabase "ругается" в виде еррор меседжа (что мне абсолютно не надо), т.е. никогда не происходит исключения, которое я могу обработать (а именно ничего не делать). Подскажите как побороть этот еррор меседж? Код: plaintext Ну так и сделай обработчик конкретно для этого типа исключений. То есть перед catch(...) вставь catch(CDBException &e) { } и проверь под отладчиком... Все должно пойматься... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 13:47 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Во-первых, Код: plaintext Во-вторых, сделал я пустую программку с указанным текстом и подключился именно к MSSQL. И ничего не изменилось, т.е. всё отработало. И при чём тут wincore.cpp, если exception должно пойматься прямо в теле твоей функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 14:23 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Ой ВэйИ при чём тут wincore.cpp, если exception должно пойматься прямо в теле твоей функции? Смотрел дебагером: при выполнении ExecuteSQL (dbcore.cpp) попадаем на участок кода: ... AFX_ODBC_CALL(::SQLExecDirect(hstmt, reinterpret_cast<SQLTCHAR *>(pszSQL), SQL_NTS)); if (!CheckHstmt(nRetCode, hstmt)) AfxThrowDBException(nRetCode, this, hstmt); ... Т.к. такой ХП на сервере нет - выполняется AfxThrowDBException и обрабатывается тут же: ... CATCH_ALL(e) { ::SQLCancel(hstmt); AFX_SQL_SYNC(::SQLFreeStmt(hstmt, SQL_DROP)); THROW_LAST(); } END_CATCH_ALL ... В свою очередь THROW_LAST обрабатывется в wincore.cpp: ... CATCH_ALL(e) { lResult = AfxProcessWndProcException(e, &pThreadState->m_lastSentMsg); TRACE(traceAppMsg, 0, "Warning: Uncaught exception in WindowProc (returning %ld).\n", lResult); DELETE_EXCEPTION (e); } AfxProcessWndProcException - показывает месадж DELETE_EXCEPTION - нет ошибки, т.е. ко мне она не приходит (да уже и не надо т.к. месадж уже показан :( ) Может у проекта настройки какие-нить не те? MFC, ATL... хз Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 14:40 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Ну давай методом последовательных приближений :) Прилагаю крошечный проект, в котором всё работает (только имя источника поменяй на своё). Ты тоже попробуй изолировать маленький кусочек своего проекта, чтобы не работало (я могу скачать и большой, но он же небось секретный). То что THROW_LAST() обрабатывается в WndProc, это ненормально. Может быть у тебя какая-то нездоровая многопоточность? Или таймер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 14:54 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
1. Спасибо за крошечный проект 2. Простите меня - засранца :) Все правильно обрабатывается (действительно ошибки ловятся). Это я не правильный код закинул... подумал, что нет никакой разницы с: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Использую этот вариант потому, что мне кажется, что в первом варианте MyDB не будет удаляться из памяти, а здесь я делаю delete MyDB. Я не прав? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 15:18 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Нет, не прав. В том случае, что ты написал сначала (и как сделано в моём проекте) MyDB (как и почти любая локальная переменная) "умрёт" на выходе из того блока, в котором была объявлена (блок это грубо говоря то что ограничено {}). И память освободится. А в случае с new хватит одного delete после блока try/catch. Наверно, в случае с new уменьшается размер exe-файла. Так всё-таки, работает или нет? В чём было дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 15:27 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
> Наверно, в случае с new уменьшается размер exe-файла. Размер файла такой же. > Так всё-таки, работает или нет? В чём было дело? если использовать Код: plaintext переписал на Код: plaintext большой сенькс, буду тестировать. ПС: > но он же небось секретный это фильтр для ISA Server Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 15:33 |
|
||
|
CDatabase exception
|
|||
|---|---|---|---|
|
#18+
Размер ехе-файла меняется квантами, обычно по 4Кб, поэтому надо объявить много переменных, чтобы это стало заметно :-) Наверно, это лучше видно на массивах (замена статических на динамические). Работает и с Код: plaintext Пожалуйста, рад помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33175400&tid=2032996]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 199ms |
| total: | 368ms |

| 0 / 0 |
