Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Внизправильное использование транзакций Найти похожие ветки
← →
LDV (2011-09-08 15:15) [0]есть функция, которая добавляет товар в указанный раздел либо разделы (определяется параметром CategoryIds). Вопрос касается использования транзакций. Стоит ли делать разделение (как у меня в коде), когда товар добавляется только в один раздел (запись только одна, использовать транзакции не имеет смысла) и когда товар добавляется в несколько разделов (тут несколько insert-запросов, использование очевидно);
function TProduct.Add(const CategoryIds: string): Integer;
var
CategoryIdList: TStrings;
I: Integer;
begin
CategoryIdList := TStringList.Create;
try
CategoryIdList.Text := CategoryIds;
for I := 0 to CategoryIdList.Count - 1 do
if not IsIntegerValue(StrToInt(CategoryIdList[I])) or not
CategoryIsValid(StrToInt(CategoryIdList[I])) then
raise Exception.CreateRes(
@ERROR_INVALID_VALUE_FOR_CATEGORY_IDS_PARAMETER);
if CategoryIdList.Count > 1 then
Database.StartTransaction;
try
// Insert query here
if CategoryIdList.Count > 1 then
Database.Commit;
except
if CategoryIdList.Count > 1 then
Database.Rollback;
raise;
end;
finally
FreeAndNil(CategoryIdList);
end;
end;
← →
Ega23 © (2011-09-08 15:23) [1]
> Стоит ли делать разделение
Зачем? Есть список - его и вставляем. Проверить только, чтобы Count <> 0, а остальное всё должно быть единообразно.
← →
OW © (2011-09-08 15:50) [2]
> всё должно быть единообразно.
+1
да даже и для одной записи можно начать транзакцию. (она все равно неявно сама начинается)
Зато заморочек меньше.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.004 c