![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по Exception. [D6, XP]
Abcdef123 © (2008-02-12 02:28:00)Здравствуйте, Мастера.
Приведу конкретный пример. Если на компе нет библиотеки Midas.dll И один из проектов(не мой) пишет реальную причину ошибки (когда пытается открыть ClientDataSet) -"Error loading Midas.dll" Это как раз как мне надо! А в другом проекте на подобную ошибку пишет Access violation at address ...". Я не знаю, как сделать, чтоб во втором проекте тоже выдавало реальную причину ошибки. Честно говоря насчет обработок ошибок у меня пока не достаточно опыта, так что я пытаюсь сравнивать даже свойства (Project Options) обоих проектов, вроде все одинаково, но может вообще не тут причина. Подскажите, плз!
Заранее благодарна,
Надя
{RASkov} (2008-02-13 15:05:00) [1]> [13] DiamondShark © (13.02.08 14:58)
> Ты щаз допросишся, что получишь сюда полтора мегабайта исходников.
Я ничего не просил, если мой пост воспринялся как просьба кода, то сорри...)
Надо быть идиотом(кой), чтоб сюда вывалить мегабайты кода, надеюсь Надя не такая :)
Хотя были случаи.....(это не относится к Abcdef123)
:о)
DiamondShark (2008-02-13 14:58:00) [2]
> Ну что еще можно посоветовать, не видя кода......
Ты щаз допросишся, что получишь сюда полтора мегабайта исходников.
А посоветовать можно немного:
1. создать минимальный тест-проект, воспроизводящий проблему.
2. Дебуг ДЦУ и трассировать до субмолекулярного уровня.
{RASkov} (2008-02-13 14:51:00) [3]> [11] Abcdef123 (13.02.08 02:20)
> Есть еще реальные советы? Плз!
Тщательнее сравнивай проекты :(
Ну что еще можно посоветовать, не видя кода......
Abcdef123 (2008-02-13 02:20:00) [4]To icWasya [9]
Спасибо за реальный код, я попробовала, и это срабатывает, но ведь не просто выдает сообщение, но до сообщения запрашивает инсталляционный диск Дельфи, приходится несоклько раз нажимать cancel и уж потом сообщение появляется, короче это вообще пользователя запугает. :-(
To vegarulez [7]
>ты просто сделай ему exception с этим сообщением ) и всё будет в ажуре )
он это увидит и будет рад )
Начальник тоже программист, так что он обычно спрашивает и проверяет результат, и тем более я занятула с результатом, ему не понравится такой вариант. Ему всегда нужно универсальное решение, чтоб и в будуших разработках правильно работало.
Есть еще реальные советы? Плз!
ketmar (2008-02-12 13:00:00) [5]>[9] icWasya © (2008-02-12 10:27:00)
>Íå óñòàíîâëåíà Midas.DLL
я бы тоже так ругался, если б у меня DLL отобрали… %-)
---
Understanding is not required. Only obedience.
icWasya (2008-02-12 10:27:00) [6]Вот. Запускай до обращений к базам.
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;
Anatoly Podgoretsky (2008-02-12 10:16:00) [7]> vegarulez (12.02.2008 09:52:07) [7]
Нет
vegarulez (2008-02-12 09:52:00) [8]
> P.S. Я очень искренне прошу помочь, если можете, я сижу
> над этой проблемой второй день и начальник хочет получить
> результат(сообщение об отсутсвии Midas.dll)
Гадя, так ты просто сделай ему exception с этим сообщением ) и всё будет в ажуре )
он это увидит и будет рад ) что ты такая молодец.
А по существу... может у тебя во втором проекте нет блока
try
...
exception
end;
ketmar (2008-02-12 09:13:00) [9]>[5] Abcdef123 (2008-02-12 09:09:00)
>начальник хочет получить результат(сообщение об отсутсвии Midas.dll)
это-то несложно как раз. сложно понять, почему оно так страдает.
---
Understanding is not required. Only obedience.
Abcdef123 (2008-02-12 09:09:00) [10]to Anatoly Podgoretsky
>...Это ошибка в программе+отсутствие Midas.dll,
Но вот ведь если на компе есть Midas.dll, но прорамма (второй проект) работает нормально, не выдает никакую ошибку! :-\ О какой ошибке вы говорите в таком случае?
P.S. Я очень искренне прошу помочь, если можете, я сижу над этой проблемой второй день и начальник хочет получить результат(сообщение об отсутсвии Midas.dll)
Anatoly Podgoretsky (2008-02-12 08:56:00) [11]> Abcdef123 (12.02.2008 02:28:00) [0]
Во втором проекте тоже выдает реальную ошибку и более страшную, чем в первом. Это ошибка в программе+отсутствие Midas.dll, а в первом только отсутствие Midas.dll
Abcdef123 (2008-02-12 03:05:00) [12]>А на какую строку "выкидывает" отладчик
Огибка срабатывает на строке 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:00) [13]>А на какую строку "выкидывает" отладчик
Огибка срабатывает на строке 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т...как я уже писала.
>Чем тебе помочь?
Подсказать, где причина, что второй проект сглатывает реальную ошибку? Это зависит от настроек прокта или надо в исходниках искать?
{RASkov} (2008-02-12 02:45:00) [14]> [0] Abcdef123 (12.02.08 02:28)
> но может вообще не тут причина
Скорее всего.... как говорится - 17 строка всему вина....
Чем тебе помочь? Сказать где генерится данная ошибка? Вот здесь: модуль DSIntf; procedure CheckDbClient(const CLSID: TGUID);
А на какую строку "выкидывает" отладчик?