powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Про обработку ошибок. Помогите плиз...
23 сообщений из 23, страница 1 из 1
Про обработку ошибок. Помогите плиз...
    #32662932
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой. Если в базе, таблице к примеру 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-файл с такими сообщениями. Как их можно перехватить в процедуре. С помощью функций или может каких глобальных переменных. Подскажите пожалуйста.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32662942
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Как их можно перехватить в процедуре. Не хватай их в процедуре.
Хватай на клиенте.
Получишь полный текст.
Его и пиши в лог.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32662999
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне в процедуре надо, я этой процедурой пишу log-таблицу, где хранятся все ошибки, и то что с базой происходит. С как на клиенте их перехватывать можно, эти текстовые сообения? пиши в C++Builder.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32663094
Deepseadiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да легко. Кинь на главную форму компонент ApplicationEvent
В событии OnException пиши в лог, и все. Что-то наподобии:

procedure TfrmMain.apevMainException(Sender: TObject; E: Exception);
begin
Loging.WriteToLog(E.Message + ' ' +E.ClassName, klError, mlFullLoging);
Application.ShowException(E);
end;
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664012
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, с ApplicationEvent более-менее понятно. Но вот в ПРОЦЕДУРЕ это можно как-ть поймать? Должны же быть какие-то глобальные переменные типа @@ERROR. Неужели никто-не знает?
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664029
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Получается что сервер знает не только код ошибки, но и имя таблицы и называние поля где это произошло. А мне нужно писать log-файл с такими сообщениями. Как их можно перехватить в процедуре.
Перехватить только так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  /* Violation of FOREIGN KEY constraint: "<string>" */ 
begin
 when sqlcode - 530  do begin
 /*А как вот тут выдернуть "<string>", чтобы выяснить какой конкретно FOREIGN KEY ругнулся — я не знаю. Самому интересно.*/ 

 ....
 end
end
Есть одна странность.
В файле LangRef.pdf либо опечатка либо ???, но код -530 и у 'Violation of FOREIGN KEY constraint: "<string>"' и у 'Cannot prepare a CREATE DATABASE/SCHEMA statement'
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664060
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zmeishe это то понятно что так, но debuger любой пишет и поле и имя столбца, кстате С++ компилятор тоже самое пишет. Блин должна же быть эта информация. Можо конечно в ручную проверять все поля и таблицы на возможные ошибки ....но это опупеть можно сколько всего писать, и при этом тормозить все будет ужасть как :(
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664089
Deepseadiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно не понятно зачем тебе на сервере отлавливать ошибки. В любом случае они передаются клиенту, будь то собственная программа, IBExpert или что либо другое. Мне кажется ты намеренно усложняешь для себя задачу. Можешь на клиенте отлавливать ошибки класса EIBError, EFIBError и т.д.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664122
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из-за того что клиета как такогого нет! Это консольная прога, и работает в бэграунде, Следит за обновлением текстовых файлов и заносит их в БД. Пишет лог таблицу с ошибками если они есть в эту же самую базу. Потом я открываю любой редактор типа IBExpert , смотрю что были за ошибки и исправляю их в ручную. Но видимо в процедурах этого не удастся:(, придется как народ говорит с помощью комнент в С++ ловить... ПРосто в Oracle и MySql есть такие переменные. Куча экземплов в инете...Да, с документацией на IB, дело не очень ...
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664147
Deepseadiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а в чем проблема? Если заносит данные в базу, значит используется какая-либо библиотека доступа. Не напрямую же ты пишешь в файл БД...
В чем написана консольная программа? Что мешает код работы с данными заключить в try...except и записывать ошибки в лог???
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664158
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку сработал constraint, например FOREIGN KEY, эту транзакцию тебе IB, и вообще никакой SQL сервер подтвердить не даст. Даже если ты в процедуре перехватишь эту ошибку — вставка в эту же базу, хотя и в другую таблицу, в этой же процедуре пойдёт в рамках этой же транзакции. Он тебе никогда не даст её подтвердить. Соответственно твой Log будет вечно пустым. Рули log`ом из своей софтины в бэграунде, но в рамках другой транзакции.
Так я думаю. Или перехват ошибки откатывает текущую транзакцию и автоматически запускает новую для лога, прямо из процедуры???
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664166
Deepseadiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдааа... Вижу как люди любят усложнять столь тривиальные задачи... Ну ну...
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664222
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все выполняется в рамках одной транзакии...все работает... может я чето недопонимаю :/....пишу так :

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. Но работало слишком медленно, а щас просто передаю все в прощедуру и вставляю, удаляю и ПЫТАЮСЬ искать ошибки...
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664331
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тады я чего-то не понимаю. В частности — что происходит с транзакцией при перехвате ошибки в процедуре.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664349
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Незнаю что с ней происходит.Наверно откат. Кстате, в процедуре она открывается автоматически? Потому -то я точно ее не стартую. Потом только в консольной программе пишу try{DataModule2->IBTransaction1->Commit();}
catch (EDatabaseError&){return;}
return;
Но это процедуре а не инсерту что в ней. Чето я вообще уже запутался чего я хочу. Все наверно просто, а я мудрствую
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664417
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Незнаю что с ней происходит.Наверно откат. Кстате, в процедуре она открывается автоматически?Как всё запущено...
Читать, читать, читать...
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664804
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читаю :)
Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( ) и ISC_SQL_INTERPRETE( ) и как ими пользоваться? Спсибо Zmeishe за то что напомнил про LangRef.pdf. Там я и вычитал про них. Может они мне и нужны:)
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664814
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Читаю :)
Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( ) и ISC_SQL_INTERPRETE( ) и как ими пользоваться? Спсибо Zmeishe за то что напомнил про LangRef.pdf. Там я и вычитал про них. Может они мне и нужны:)Не нужны. Ты же пишешь на IBX. Там уже обёрка для них есть.
Лови ошибки на клиенте. В процедуре ты не отловишь текст.
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664842
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я из IBX только IBStoredProc и использую. А ловить можно с помощью чего ? IBEvent что-ли или как? первый раз я это делаю... :/
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664896
Deepseadiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
......
  if not IsConnected() then exit;
  if qCustom.Transaction.InTransaction then qCustom.Transaction.Commit();
  qCustom.Transaction.StartTransaction();
  try
  qCustom.SQL.Clear();
  qCustom.SQL.Add('select LINENO, AVALUE from get_baseconstant');
  qCustom.ExecQuery();
  Loging.WriteToLog('Основные константы успешно загружены...', klOk, mlFullLoging);
  except
    on E: Exception do
    begin
    qCustom.Transaction.Commit();
    Loging.WriteToLog('Неудачная загрузка основных констант!' +E.Message, klError, mlFullLoging);
    MsgBox('Неудачная загрузка основных констант! '+E.Message, mtErr);
    end;
  end;//end except
.....
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32664943
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Еще вопрос: Кто-ть слышал про функции ISC_PRINT_SQLERROR( )
О, я, я слышал! Именно она выводит сообщение "Printer out of paper..."
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32665082
D.D.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лентяй ты пиши по чаще :) может настроение улучшится :)
...
Рейтинг: 0 / 0
Про обработку ошибок. Помогите плиз...
    #32665147
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D.D.G.Лентяй ты пиши по чаще :) может настроение улучшится :)Это не шутка
Сюда смотри .
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Про обработку ошибок. Помогите плиз...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]