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

Вниз

Как подавить вывод сообщения об ошибке.   Найти похожие ветки 

 
Sergeyy ©   (2002-12-17 08:55) [0]

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


var
MySheet: Variant; // переменная для позднего связывания.
begin
....
try
MySheet.SaveAs("c:\myfile.xls");
except
end;
...
end;


Правильно ли это? И если нет, то как надо?


 
Юрий Зотов ©   (2002-12-17 09:06) [1]

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


 
Anatoly Podgoretsky ©   (2002-12-17 09:22) [2]

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




 
Andrey007   (2002-12-17 10:51) [3]

Кстати, я тут лазил по исходникам Delphi компонент (D5) и в каком-то модуле видел как раз такую конструкцию

try
какие-то операторы
except
;
end;


 
Andrey007   (2002-12-17 11:00) [4]

В модуле CorbaObj.pas

destructor TCorbaStub.Destroy;
begin
try
FStub := nil;
except
// Ignore exceptions when disconnecting
end;
inherited Destroy;
end;

В модуле CorbaCon

procedure TCorbaConnection.GetProviderNames(Proc: TGetStrProc);
var
List: Variant;
I: Integer;
begin
Connected := True;
VarClear(List);
try
List := (IUnknown(AppServer) as IAppServer).AS_GetProviderNames;
except
{ Assume any errors means the list is not available. }
end;
if VarIsArray(List) and (VarArrayDimCount(List) = 1) then
for I := VarArrayLowBound(List, 1) to VarArrayHighBound(List, 1) do
Proc(List[I]);
end;

В модуле System

procedure NotifyModuleUnload(HInstance: LongWord);
var
P: PModuleUnloadRec;
begin
P := ModuleUnloadList;
while P <> nil do
begin
try
P.Proc(HInstance);
except
// Make sure it doesn"t stop notifications
end;
P := P.Next;
end;
end;

В модуле ADODB

function TADOConnection.GetDefaultDatabase: WideString;
begin
if Connected then
try
Result := ConnectionObject.DefaultDatabase
except
{ Ignore errors reading this property }
end
else
Result := FDefaultDatabase;
end;

и т.д. и т.п.

Так что ничего страшного в использовании этого приёма я не вижу.


 
Anatoly Podgoretsky ©   (2002-12-17 11:10) [5]

Ты обратил внимание, что они все документировал почемы так поступили и случаи в которых это использовано, обоснованны


 
Andrey007   (2002-12-17 11:17) [6]

Насчёт документирования - ты имеешь в виду комментарии в тексте? Насчёт обоснованности - не знаю. А как, по-твоему, отличать обоснованное использование этого приёма от необоснованного?

С уважением.



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
1-85920
___Nikolay
2002-12-15 14:35
2002.12.26
DBGRID с фиксированным столбцом


1-85930
oleon
2002-12-17 12:49
2002.12.26
Здраствуйте. Переход по контролам на форме.


6-86067
Rob
2002-10-30 17:06
2002.12.26
Проблема с повторным соединением


1-85924
iNew
2002-12-17 06:36
2002.12.26
Как запихать текст в ProgressBar. Lable не плдходит так, как


14-86122
HiEx
2002-12-05 12:48
2002.12.26
Помогите найти FastNet для D7. (За мной если что не заржавеет)