Главная страница
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.04 c
2-1206121928
DJ_UZer
2008-03-21 20:52
2008.04.20
Выделение в мемо


2-1206286250
GHT
2008-03-23 18:30
2008.04.20
Условие в SQL запросе: or <--> and


2-1204039868
nusik1990
2008-02-26 18:31
2008.04.20
ввод в TEdit


15-1204390811
Ник
2008-03-01 20:00
2008.04.20
Потерял "горячие" клавиши :(


2-1206252269
Igor23
2008-03-23 09:04
2008.04.20
Активные формы