Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
15-1202051221
Dmitry S
2008-02-03 18:07
2008.03.09
UpdateLayeredWindow


2-1202711082
Dib@zol
2008-02-11 09:24
2008.03.09
Win98 + AlphaBlend = ?


2-1202554859
alex_kasycky
2008-02-09 14:00
2008.03.09
Создание подсветки синтаксиса.


10-1132058772
ForgotPass
2005-11-15 15:46
2008.03.09
COM-объект FlashGet ("JetCar.Netscape")


15-1202064673
korneley
2008-02-03 21:51
2008.03.09
Обратная совместимость BDS2006 и D7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский