Главная страница
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.018 c
15-1204735704
Zeqfreed
2008-03-05 19:48
2008.04.20
Подскажите, пожалуйста, аудиоплеер на флэше


2-1206225249
Studios
2008-03-23 01:34
2008.04.20
Как загрузить jpeg через ICS ?


2-1206708622
asdf2
2008-03-28 15:50
2008.04.20
DataSet


3-1195702264
Петро
2007-11-22 06:31
2008.04.20
Универсальный доступ к СУБД


15-1204294018
Kolan
2008-02-29 17:06
2008.04.20
У кого нибудь осталась ветка про выбор emdedded СУБД?