![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка исключений
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;
Это ты типа и смотреть и искать хочешь одним экземпляром компонента? Экономишь?