Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.043 c