![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Transaction приводит в исключению [D7, XP]
delphinub © (2008-03-25 22:54:00)Сразу дабы не быть голословным привожу кусок кода
procedure TExcel.Change(FileName: String);
var i: integer;
begin
DataModule1.OpenQuery.SQL.Clear;
DataModule1.OpenQuery.SQL.Add('SELECT * FROM modifies');
DataModule1.OpenQuery.Open;
//DataModule1.MSSQLConnection.StartTransaction(TransDesc);
for i:=0 to DataModule1.OpenQuery.RecordCount-1 do
begin
CompName := DataModule1.OpenQuery.Fields[1].AsString;
Value := DataModule1.OpenQuery.Fields[0].AsString;
qua := DataModule1.OpenQuery.Fields[2].AsInteger;
DataModule1.QueryComp.SQL.Clear;
DataModule1.QueryComp.SQL.Add('UPDATE '+CompName+' SET quantity=quantity-'+IntToStr(qua)+' WHERE name='''+Value+'''');
DataModule1.QueryComp.ExecSQL();
DataModule1.OpenQuery.Next;
end;
//DataModule1.MSSQLConnection.Commit(TransDesc);
exc.SaveFile(FileName);
DataModule1.OpenQuery.Close;
end;
раскомментирование управления транкзацией приводит к ошибке в выделенной строке с текстом EDatabaseError with Message ''. Да, сообщение пустое :) Просто исключение не понимаю почему.
Loginov Dmitry (2008-03-26 00:34:00) [41]> цикл if
for, разумеется
Loginov Dmitry (2008-03-26 00:33:00) [42]1) Возможно, транзакцию требуется стартануть до OpenQuery.Open, либо же что-то где-то настроено неверно.
2) Для перебора записей цикл ifне используют. Правильно так:
DataModule1.OpenQuery.First;
while not DataModule1.OpenQuery.Eof do
begin
// Обработка очередной записи
DataModule1.OpenQuery.Next;
end;
3) Защити работу с набором данных DataModule1.OpenQuery с помощью оператора try..finally:
DataModule1.OpenQuery.Open;
try
//
finally
DataModule1.OpenQuery.Close;
end;
Иначе при возникающих в функции ошибках она становится "одноразовой", т.к. после первого вызова дело до Close не доходит, а при втором вызове ошибка произойдет на SQL.Clear, а это только усложняет отладку.
delphinub (2008-03-25 22:55:00) [43]кстати, если в таблице modifies была всего одна строчка, то почему-то всё срабатывает без ошибок..