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

Вниз

Transaction приводит в исключению   Найти похожие ветки 

 
delphinub   (2008-03-26 17:36) [40]

Добавил еще одно соединение с MS SQL.. заработало вот так:

procedure TExcel.Change(FileName: String);
var i: integer;
begin

 DataModule1.OpenQuery.SQL.Clear;
 DataModule1.OpenQuery.SQL.Add("SELECT * FROM modifies");
 DataModule1.SQLClon.Params.Assign(DataModule1.MSSQLConnection.Params);
 DataModule1.SQLClon.Connected:=true;

 DataModule1.MSSQLConnection.StartTransaction(TransDescr);
 try
   DataModule1.OpenQuery.Open;
   while not DataModule1.OpenQuery.Eof do
   begin

     CompName := DataModule1.OpenQuery.Fields[1].AsString;
     Value := DataModule1.OpenQuery.Fields[0].AsString;
     qua := DataModule1.OpenQuery.Fields[2].AsInteger;

     DataModule1.SQLClon.StartTransaction(TD);
     DataModule1.Clon.SQL.Clear;
     //MainForm.Label1.Caption:="UPDATE "+CompName+" SET quantity=quantity-"+IntToStr(qua)+" WHERE name="""+Value+"""";
     DataModule1.Clon.SQL.Add("UPDATE "+CompName+" SET quantity=quantity-"+IntToStr(qua)+" WHERE name="""+Value+"""");
     DataModule1.Clon.ExecSQL();
     DataModule1.SQLClon.Commit(TD);

     DataModule1.OpenQuery.Next;
   end;
   DataModule1.MSSQLConnection.Commit(TransDescr);
 except
   ShowMessage("ÊÓ!");
   DataModule1.MSSQLConnection.Rollback(TransDescr);
 end;
// exc.SaveFile(FileName);
 DataModule1.OpenQuery.Close;
end;


озонал необходимость перехода на ADO


 
delphinub   (2008-03-26 18:37) [41]

покопавшись еще часик внедрил таки решение во весь остальной код и отладил. Всё работает. Спасибо всем, в особенности Johnmen!


 
Anatoly Podgoretsky ©   (2008-03-26 21:12) [42]

> delphinub  (26.03.2008 15:18:13)  [13]

Уже не смущает, просто имена похожие и мне показалось что это один и тот же компонент. Про dbexpress ничего не скажу, просто это неудачная на мой взгляд технологие, хотели как БДЕ и получилось как БДЕ


 
sniknik ©   (2008-03-26 21:35) [43]

> заработало вот так:
на одну команду делать свою транзакцию бессмысленно, она и так в ней выполняется...

> CompName := DataModule1.OpenQuery.Fields[1].AsString;
>
> ... UPDATE "+CompName+" SET ...
куча таблиц с именами хранящимися в данных еще одной таблицы? просто чудо а не структура базы... чудо юдо...

но даже в таком виде просто непочатый край для оптимизации...
вместо того чтобы тянуть на клиента полностью данные "FROM modifies", и потом по одной посылать кучу команд, лучше вытащить только имена таблиц (CompName), а абдейт строить групповой для всех записей одной таблици (с объединением), время обработки сократится на порядки. или тоже самое делать в процедуре (транзакцию поверх всех изменений делать. типа раз выполнилось то для всех таблиц, нет значит ни для одной).
а еще лучше структуру пересмотреть. (так чтобы вообще на все потребовался всего лиш 1 (один) запрос. хотя это и неинтересно наверное будет. транзакцию некуда присобачить... но она в общем то и в том виде, что сейчас бессмысленна)



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

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

Наверх




Память: 0.54 MB
Время: 0.017 c
15-1204716527
афоня
2008-03-05 14:28
2008.04.20
рисование графиков в Perl


2-1206598873
zdm
2008-03-27 09:21
2008.04.20
Отслеживание исполнения


2-1206285320
hahol_64_rus
2008-03-23 18:15
2008.04.20
не могу и все тут ....


2-1206563385
vromav
2008-03-26 23:29
2008.04.20
Преобразование типов


3-1196234534
Tronado
2007-11-28 10:22
2008.04.20
"Сквозной" поиск