Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.09;
Скачать: CL | DM;

Вниз

Вопрос по Exception.   Найти похожие ветки 

 
Abcdef123   (2008-02-12 02:28) [0]

Здравствуйте, Мастера.
Приведу конкретный пример. Если на компе нет библиотеки Midas.dll И один из проектов(не мой) пишет реальную причину ошибки (когда пытается открыть ClientDataSet) -"Error loading Midas.dll" Это как раз как мне надо!  А в другом проекте на подобную ошибку пишет Access violation at address ...". Я не знаю, как сделать, чтоб во втором проекте тоже выдавало реальную причину ошибки. Честно говоря насчет обработок ошибок у меня пока не достаточно опыта, так что я пытаюсь сравнивать даже свойства (Project Options) обоих проектов, вроде все одинаково, но может вообще не тут причина. Подскажите, плз!  
Заранее благодарна,
Надя


 
{RASkov} ©   (2008-02-12 02:45) [1]

> [0] Abcdef123   (12.02.08 02:28)
> но может вообще не тут причина

Скорее всего.... как говорится - 17 строка всему вина....
Чем тебе помочь? Сказать где генерится данная ошибка? Вот здесь: модуль DSIntf; procedure CheckDbClient(const CLSID: TGUID);
А на какую строку "выкидывает" отладчик?


 
Abcdef123   (2008-02-12 03:05) [2]

>А на какую строку "выкидывает" отладчик
Огибка срабатывает на строке tblMain.Open; a выкидывает на DB модуль procedure TDataSet.SetActive(Value: Boolean);строка OpenCursor;
Должна сказать, что оба проекта используют идею OnException := MyExceptionHandler; (это написанная прошраммистом процедура, чтоб показывать содержание ошибки на одной из форм проекта TFRM_Exception.
procedure TFRM_Exception.MKExceptionHandler(sender : TObject; e : exception);
И вот в первом проекте, когда эта процедура срабатывает, то параметр e.message уже содержит нужную информацию ошибки. А во втором проекте e.message совдежит Access violatioт...как я уже писала.

>Чем тебе помочь?
Подсказать, где причина, что второй проект сглатывает реальную ошибку? Это зависит от настроек прокта или надо в исходниках искать?


 
Abcdef123   (2008-02-12 03:05) [3]

>А на какую строку "выкидывает" отладчик
Огибка срабатывает на строке tblMain.Open; a выкидывает на DB модуль procedure TDataSet.SetActive(Value: Boolean);строка OpenCursor;
Должна сказать, что оба проекта используют идею OnException := MyExceptionHandler; (это написанная прошраммистом процедура, чтоб показывать содержание ошибки на одной из форм проекта TFRM_Exception.
procedure TFRM_Exception.MKExceptionHandler(sender : TObject; e : exception);
И вот в первом проекте, когда эта процедура срабатывает, то параметр e.message уже содержит нужную информацию ошибки. А во втором проекте e.message совдежит Access violatioт...как я уже писала.

>Чем тебе помочь?
Подсказать, где причина, что второй проект сглатывает реальную ошибку? Это зависит от настроек прокта или надо в исходниках искать?


 
Anatoly Podgoretsky ©   (2008-02-12 08:56) [4]

> Abcdef123  (12.02.2008 02:28:00)  [0]

Во втором проекте тоже выдает реальную ошибку и более страшную, чем в первом. Это ошибка в программе+отсутствие Midas.dll, а в первом только отсутствие Midas.dll


 
Abcdef123   (2008-02-12 09:09) [5]

to Anatoly Podgoretsky
>...Это ошибка в программе+отсутствие Midas.dll,
Но вот ведь если на компе есть Midas.dll, но прорамма (второй проект) работает нормально, не выдает никакую ошибку! :-\ О какой ошибке вы говорите в таком случае?

P.S. Я очень искренне прошу помочь, если можете, я сижу над этой проблемой второй день и начальник хочет получить результат(сообщение об отсутсвии Midas.dll)


 
ketmar ©   (2008-02-12 09:13) [6]

>[5] Abcdef123 (2008-02-12 09:09:00)
>начальник хочет получить результат(сообщение об отсутсвии Midas.dll)

это-то несложно как раз. сложно понять, почему оно так страдает.

---
Understanding is not required. Only obedience.


 
vegarulez ©   (2008-02-12 09:52) [7]


> P.S. Я очень искренне прошу помочь, если можете, я сижу
> над этой проблемой второй день и начальник хочет получить
> результат(сообщение об отсутсвии Midas.dll)

Гадя, так ты просто сделай ему exception с этим сообщением ) и всё будет в ажуре )
он это увидит и будет рад ) что ты такая молодец.

А по существу... может у тебя во втором проекте нет блока
try
...
exception
end;


 
Anatoly Podgoretsky ©   (2008-02-12 10:16) [8]

> vegarulez  (12.02.2008 09:52:07)  [7]

Нет


 
icWasya ©   (2008-02-12 10:27) [9]

Вот. Запускай до обращений к базам.

procedure TestMidas;
var
 O:IUnknown;
 ClassID: TCLSID;
begin
 try
   ClassID := ProgIDToClassID("Borland.Midas_DSBase");
   O:=CreateComObject(ClassID);
   O:=Nil;
 except
   MessageDlg("Íå óñòàíîâëåíà Midas.DLL", mtError, [mbOK], 0);
   Halt;
 end;
end;

procedure TestDBClient;
var
 O:IUnknown;
 ClassID: TCLSID;
begin
 try
   ClassID := ProgIDToClassID("Borland.DBClient_DSBase");
   O:=CreateComObject(ClassID);
   O:=Nil;
 except
   MessageDlg("Íå óñòàíîâëåíà DBClient.DLL", mtError, [mbOK], 0);
   Halt;
 end;
end;


 
ketmar ©   (2008-02-12 13:00) [10]

>[9] icWasya © (2008-02-12 10:27:00)
>Íå óñòàíîâëåíà Midas.DLL

я бы тоже так ругался, если б у меня DLL отобрали… %-)

---
Understanding is not required. Only obedience.


 
Abcdef123   (2008-02-13 02:20) [11]

To icWasya [9]
Спасибо за реальный код, я попробовала, и это срабатывает, но ведь не просто выдает сообщение, но до сообщения запрашивает инсталляционный диск Дельфи, приходится несоклько раз нажимать cancel и уж потом сообщение появляется, короче это вообще пользователя запугает. :-(

To vegarulez [7]
>ты просто сделай ему exception с этим сообщением ) и всё будет в ажуре )
он это увидит и будет рад )
Начальник тоже программист, так что он обычно спрашивает и проверяет результат, и тем более я занятула с результатом, ему не понравится такой вариант. Ему всегда нужно универсальное решение, чтоб и в будуших разработках правильно работало.

Есть еще реальные советы? Плз!


 
{RASkov} ©   (2008-02-13 14:51) [12]

> [11] Abcdef123   (13.02.08 02:20)
> Есть еще реальные советы? Плз!

Тщательнее сравнивай проекты :(
Ну что еще можно посоветовать, не видя кода......


 
DiamondShark ©   (2008-02-13 14:58) [13]


> Ну что еще можно посоветовать, не видя кода......

Ты щаз допросишся, что получишь сюда полтора мегабайта исходников.

А посоветовать можно немного:
1. создать минимальный тест-проект, воспроизводящий проблему.
2. Дебуг ДЦУ и трассировать до субмолекулярного уровня.


 
{RASkov} ©   (2008-02-13 15:05) [14]

> [13] DiamondShark ©   (13.02.08 14:58)
> Ты щаз допросишся, что получишь сюда полтора мегабайта исходников.

Я ничего не просил, если мой пост воспринялся как просьба кода, то сорри...)
Надо быть идиотом(кой), чтоб сюда вывалить мегабайты кода, надеюсь Надя не такая :)
Хотя были случаи.....(это не относится к Abcdef123)
:о)



Страницы: 1 вся ветка

Текущий архив: 2008.03.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
11-1185211297
kol tasarım
2007-07-23 21:21
2008.03.09
kol%mck


15-1202135900
oldman
2008-02-04 17:38
2008.03.09
Где можно бесплатно завести большой почтовый ящик?


15-1201989644
KilkennyCat
2008-02-03 01:00
2008.03.09
Околофорумные, которые неработающие форумные....


15-1201865991
DmitriyG.
2008-02-01 14:39
2008.03.09
Кривой Help для Delphi 2007


11-1183368735
Delphuk
2007-07-02 13:32
2008.03.09
Ошибка после нескольких вызывов MCK формы из DLL