Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка исключений


Nameziz ©   (2008-09-22 13:28:00) 

Народ Подскажите новичку где в коде необходимо сделать обработку исключений + дайте советов по оптимизации.

function TDM.FindById(ItemId: Integer): Boolean;
begin
 Result := False;
 if database_Connected then
   with ModelsQuery do
   begin
     SQL.Text := Format(const_sql_FindById, [ItemId]);
     Open;
     Result := True;
     if Result then
     begin
       if Selection = s1 then
         ItemS1 := ItemS2;
     end
     else
       ItemS1 := ItemId;
     Selection := s1;
     SQL.Text := const_sql_AllModels;
end;


Поросенок Винни-Пух   (2008-09-22 17:16:00) [1]

SQL.Text := Format(const_sql_FindById, [ItemId]);
    Open;
    Result := not IsEmpty;
    if Result then


{RASkov}   (2008-09-22 16:03:00) [2]

> [5] Nameziz   (22.09.08 15:59)
> вопрос относительно открытия и закрыитя dataset. нужно ли
> брать в try / finally

:)

> В вашем коде таким участком является попытка открыть таблицу
> БД, вот и заключите его в try/except


clickmaker   (2008-09-22 16:03:00) [3]

> нужно ли брать в try / finally

да
вообще на открытие любого ресурса, если используешь его только в это блоке кода, нужно своё закрытие. По принципу "взял у системы - поюзал - отдал"


Nameziz   (2008-09-22 15:59:00) [4]

спасибо. тогда еще вопрос относительно открытия и закрыитя dataset. нужно ли брать в try / finally


MsGuns   (2008-09-22 15:50:00) [5]

Защищенные блоки кода используются только в тех местах, которые "не зависят" от программиста, например при обращении к внешнему устройству, попытке доступа к скл-серверу, запросе ресурсов, обработке введенных пользователем как текст данных и т.д. Т.е. в ПОТЕНЦИАЛЬНО ОПАСНЫХ участках кода. В вашем коде таким участком является попытка открыть таблицу БД, вот и заключите его в try/except


KSergey   (2008-09-22 13:48:00) [6]

> Nameziz   (22.09.08 13:28)  
> Народ Подскажите новичку где в коде необходимо сделать обработку  исключений

Можно не делать нигде в этом коде.
А что хотим этой обработкой добиться?


Ega23   (2008-09-22 13:45:00) [7]

try
 Dataset.SQL.Text := ....;
 DataSet.parameters.....
 try
   Dataset.Open;
   Result := True;
 except on E : Exception do
   begin
     Result := False;
     LogError(E.message);
   end;
 end;
finally
 DataSet.Close; // Ну это если надо
end;


Sergey13   (2008-09-22 13:34:00) [8]

> [0] Nameziz   (22.09.08 13:28)

А что тут оптимизировать? Это надо стереть и переписать заново.

например

> SQL.Text := Format(const_sql_FindById, [ItemId]);

надо заменить на параметрический запрос.

> Result := True;
>     if Result then

А какой Result еще может быть в этом месте?

> SQL.Text := Format(const_sql_FindById, [ItemId]);
> SQL.Text := const_sql_AllModels;

Это ты типа и смотреть и искать хочешь одним экземпляром компонента? Экономишь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо