|
|
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Вопрос такой. Если в базе, таблице к примеру Table1, в поле Name происходит ошибка с кодом -530 то возвращается сообщение типа: violation of FOREIGN KEY constraint "". violation of FOREIGN KEY constraint "FK_Table1_Table2" on table "Table1". или для -625: The insert failed because a column definition includes validation constraints. validation error for column Name, value "*** null ***". Получается что сервер знает не только код ошибки, но и имя таблицы и называние поля где это произошло. А мне нужно писать log-файл с такими сообщениями. Как их можно перехватить в процедуре. С помощью функций или может каких глобальных переменных. Подскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 13:32:20 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Как их можно перехватить в процедуре. Не хватай их в процедуре. Хватай на клиенте. Получишь полный текст. Его и пиши в лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 13:35:42 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Мне в процедуре надо, я этой процедурой пишу log-таблицу, где хранятся все ошибки, и то что с базой происходит. С как на клиенте их перехватывать можно, эти текстовые сообения? пиши в C++Builder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 13:52:26 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Да легко. Кинь на главную форму компонент ApplicationEvent В событии OnException пиши в лог, и все. Что-то наподобии: procedure TfrmMain.apevMainException(Sender: TObject; E: Exception); begin Loging.WriteToLog(E.Message + ' ' +E.ClassName, klError, mlFullLoging); Application.ShowException(E); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2004, 14:26:06 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Спасибо, с ApplicationEvent более-менее понятно. Но вот в ПРОЦЕДУРЕ это можно как-ть поймать? Должны же быть какие-то глобальные переменные типа @@ERROR. Неужели никто-не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 08:48:23 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Получается что сервер знает не только код ошибки, но и имя таблицы и называние поля где это произошло. А мне нужно писать log-файл с такими сообщениями. Как их можно перехватить в процедуре. Перехватить только так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В файле LangRef.pdf либо опечатка либо ???, но код -530 и у 'Violation of FOREIGN KEY constraint: "<string>"' и у 'Cannot prepare a CREATE DATABASE/SCHEMA statement' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 09:06:36 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Zmeishe это то понятно что так, но debuger любой пишет и поле и имя столбца, кстате С++ компилятор тоже самое пишет. Блин должна же быть эта информация. Можо конечно в ручную проверять все поля и таблицы на возможные ошибки ....но это опупеть можно сколько всего писать, и при этом тормозить все будет ужасть как :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 09:20:43 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Все равно не понятно зачем тебе на сервере отлавливать ошибки. В любом случае они передаются клиенту, будь то собственная программа, IBExpert или что либо другое. Мне кажется ты намеренно усложняешь для себя задачу. Можешь на клиенте отлавливать ошибки класса EIBError, EFIBError и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 09:41:19 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Из-за того что клиета как такогого нет! Это консольная прога, и работает в бэграунде, Следит за обновлением текстовых файлов и заносит их в БД. Пишет лог таблицу с ошибками если они есть в эту же самую базу. Потом я открываю любой редактор типа IBExpert , смотрю что были за ошибки и исправляю их в ручную. Но видимо в процедурах этого не удастся:(, придется как народ говорит с помощью комнент в С++ ловить... ПРосто в Oracle и MySql есть такие переменные. Куча экземплов в инете...Да, с документацией на IB, дело не очень ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 09:56:11 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Так а в чем проблема? Если заносит данные в базу, значит используется какая-либо библиотека доступа. Не напрямую же ты пишешь в файл БД... В чем написана консольная программа? Что мешает код работы с данными заключить в try...except и записывать ошибки в лог??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 10:13:40 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Поскольку сработал constraint, например FOREIGN KEY, эту транзакцию тебе IB, и вообще никакой SQL сервер подтвердить не даст. Даже если ты в процедуре перехватишь эту ошибку — вставка в эту же базу, хотя и в другую таблицу, в этой же процедуре пойдёт в рамках этой же транзакции. Он тебе никогда не даст её подтвердить. Соответственно твой Log будет вечно пустым. Рули log`ом из своей софтины в бэграунде, но в рамках другой транзакции. Так я думаю. Или перехват ошибки откатывает текущую транзакцию и автоматически запускает новую для лога, прямо из процедуры??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 10:21:20 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Мдааа... Вижу как люди любят усложнять столь тривиальные задачи... Ну ну... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 10:25:03 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Все выполняется в рамках одной транзакии...все работает... может я чето недопонимаю :/....пишу так : insert into...... when sqlcode -530 do begin insert into logs(file_name, discription,line,error_code,lddate)values((select hisid from history where file_name=:FILE_NAME),'violation of FOREIGN KEY constraint',:LINE,'-530',:TIME_ERROR); end код ошибки описываю вручную...грубо конечно ...прошу не судить...орлята учатся летать. А консолька заносит данные чарез процедуру, т.е параметры входные это данные для построения insert в процедуре. Раньше я работал через IBQuery и IBSQL. Но работало слишком медленно, а щас просто передаю все в прощедуру и вставляю, удаляю и ПЫТАЮСЬ искать ошибки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 10:46:44 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Тады я чего-то не понимаю. В частности — что происходит с транзакцией при перехвате ошибки в процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 11:18:55 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Незнаю что с ней происходит.Наверно откат. Кстате, в процедуре она открывается автоматически? Потому -то я точно ее не стартую. Потом только в консольной программе пишу try{DataModule2->IBTransaction1->Commit();} catch (EDatabaseError&){return;} return; Но это процедуре а не инсерту что в ней. Чето я вообще уже запутался чего я хочу. Все наверно просто, а я мудрствую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 11:25:12 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Незнаю что с ней происходит.Наверно откат. Кстате, в процедуре она открывается автоматически?Как всё запущено... Читать, читать, читать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 12:01:21 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Читаю :) Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( ) и ISC_SQL_INTERPRETE( ) и как ими пользоваться? Спсибо Zmeishe за то что напомнил про LangRef.pdf. Там я и вычитал про них. Может они мне и нужны:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 14:16:37 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Читаю :) Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( ) и ISC_SQL_INTERPRETE( ) и как ими пользоваться? Спсибо Zmeishe за то что напомнил про LangRef.pdf. Там я и вычитал про них. Может они мне и нужны:)Не нужны. Ты же пишешь на IBX. Там уже обёрка для них есть. Лови ошибки на клиенте. В процедуре ты не отловишь текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 14:19:45 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Да я из IBX только IBStoredProc и использую. А ловить можно с помощью чего ? IBEvent что-ли или как? первый раз я это делаю... :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 14:28:17 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 14:43:57 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( ) О, я, я слышал! Именно она выводит сообщение "Printer out of paper..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 14:52:57 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
Лентяй ты пиши по чаще :) может настроение улучшится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 15:40:39 |
|
||
|
Про обработку ошибок. Помогите плиз...
|
|||
|---|---|---|---|
|
#18+
D.D.G.Лентяй ты пиши по чаще :) может настроение улучшится :)Это не шутка Сюда смотри . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2004, 16:05:43 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32664147&tid=1578028]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 408ms |

| 0 / 0 |
