Главная страница
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.021 c
15-1205096265
POP
2008-03-09 23:57
2008.04.20
Запуск программы из под лоадера.


2-1206166003
Armond
2008-03-22 09:06
2008.04.20
Насчет календарика


15-1204576135
Kolan
2008-03-03 23:28
2008.04.20
Думаю поставить терминал оплаты, поделитесь опытом.


4-1178810111
йцукенг
2007-05-10 19:15
2008.04.20
Как получить handle элемента управления окна?


2-1206423702
ganda
2008-03-25 08:41
2008.04.20
Подскажите компонент который без проблем работает с dbf