Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Транзакции   Найти похожие ветки 

 
ka ©   (2004-05-19 17:10) [0]

Приветствую.
Нужно удалить строку из одной таблицы и добавить строку в другую таблицу в рамках одной транзакции. Я делаю это так:

DataBase1.StartTransaktion
try



DataBase1.Commit;
except
DataBase1.RollBack;
end;

Все бы хорошо, но после того как я проверил как же работают транзакции, я увидел, что в моем варианте они вообще не работают.
Я благополучно удалил строку из одной таблицы (проверил физически из файла таблицы строка удалилась, я думал что этого быть не должно) вызвал ошибку произошел откат - DataBase1.Rollback, а в таблице удаленная строка не появилась. В чем дело? Я подумал может дело в кэшировании страниц, добавил  DataBase1.ApplyUpdates(…),DataBase1.CanselUpdates(…) убрал DataBase1.StartTransaktion, DataBase1.Commit, DataBase1.RollBack. Да еще включил Query.CashedUpdates.
Вот.
В чем я протуканил?


 
Reindeer Moss Eater ©   (2004-05-19 17:28) [1]

Прочитай раздел "Transactions on Paradox, dBASE, FoxPro, and Access" из Borland Database Engine Online Reference


 
Mike Kouzmine ©   (2004-05-19 17:28) [2]

Наппиши как ты это сделал подробно.


 
ka ©   (2004-05-19 17:35) [3]

Процедура выполняющая обмен товара - подробно. (Здесь без CashedUpdates)
procedure TfExchange.DoReturn;
var i,SysNo,code:longword;
SL:TStringList;
sSizes,sProcure_price,sReception_date,sBat:string;
begin

DataBase1.StartTransaction;
try
 SL := TStringList.create;
 i := choiserow - 1;
 SysNo := Query1.FieldByName("pSysNo").AsInteger;
 code := Query1.FieldByName("trCode").AsInteger;
 sSizes := Query1.FieldByName("trSize").AsString;
 sProcure_price :=Query1.FieldByName("trProcur_price").AsString;
 sReception_date :=Query1.FieldByName("trReception_date").AsString;
 sBat :=Query1.FieldByName("trBat").AsString;

 if i >= 0 then
 begin
   //Удалить запись о продаже из таблицы продаж.
   SL.Clear;
   SL.Add("DELETE FROM "+ tradetableex);
   SL.Add("WHERE trCode = "+IntToStr(code));
   querysql(SL,true);

   //Добавить в таблицу размеров запись.
   SL.clear;
   SL.Add("INSERT INTO " + sectablenameex);
   SL.Add("(sSysNo,sSizes,sProcure_price,sReception_date,sBat)");
   SL.Add("VALUES");
   SL.Add("(" + """+ IntToStr(SysNo) + "", ""+ sSizes+ "",");
   SL.Add("""+ sProcure_price +"", ""+sReception_date+"" ,""+sbat+"");");
   querysql(SL,true);
 end;
DataBase1.Commit;

except
 on EO:Exception do
 begin
   DataBase1.Rollback;
   MessageDlg("Ошибка при работе с базой данных. Возврат не выполнен."
     + #13#13 +  EO.Message ,mtError,[mbOk],0);
 end;
end
end;


 
Reindeer Moss Eater ©   (2004-05-19 17:38) [4]

Ну и где здесь генерация исключения для прерывания транзакции?


 
Курдль ©   (2004-05-19 17:42) [5]


> Процедура выполняющая обмен товара - подробно. (Здесь без
> CashedUpdates)

А почему? Мне кажется, что это бы решило все проблемы.


 
ka ©   (2004-05-19 17:48) [6]

Генерации для исключения здесь нет. Она была после удаления записи о продажи.
Да еще БД локальная.
Когда я включал CashedUpdates в файле таблицы после удаления запись удалялась. А почему? Ведь это должно было случиться только после ApplyUpdates?


 
Курдль ©   (2004-05-19 17:49) [7]


> ka ©   (19.05.04 17:35) [3]

Вы зарплату получаете "построчно", как журналист?  :)


 
ka ©   (2004-05-19 17:55) [8]

Дело в том, что это обмен товара в БД магазина. То есть выбирается конкретный товар и переносится из таблицы проданных товаров в таблицу на складе. Поэтому и построчно.


 
Соловьев ©   (2004-05-19 17:57) [9]


> Да еще БД локальная.

Пока только начал уйди нафиг ты с этого парадокса- скачай FireBird и разберись с ним.


 
Курдль ©   (2004-05-19 17:59) [10]


> ka ©   (19.05.04 17:55) [8]
> Дело в том, что это обмен товара в БД магазина. То есть
> выбирается конкретный товар и переносится из таблицы проданных
> товаров в таблицу на складе. Поэтому и построчно.

Про зарплату "построчно" - это я о размере кода.
А "перенос товара на склад" - это нонсенс достойный орешника!
А не достаточно было "носить" ID-шник одной записи? :)


 
ka ©   (2004-05-19 18:01) [11]

Да самое ужасное, что не только начал, начал уже давно, и сделано уже много. А что так все запущено с этим парадоксом?? :-(


 
Johnmen ©   (2004-05-19 18:04) [12]

>выбирается конкретный товар и переносится из таблицы проданных
>товаров в таблицу на складе.

Т.е. сначала продали, а потом вернули ? :)
Я думаю глобальная проблема - неточности при проектировании БД. В данном случае надо бы сделать так, чтобы переброска товара заключалась в UPDATE нужной записи в соответствующей таблице.


 
ka ©   (2004-05-19 18:10) [13]

Да нет при проектировании все нормально суть же не в этом. Мне нужно узнать почему же у меня не работали транзакции.


 
Соловьев ©   (2004-05-19 18:12) [14]


> [13] ka ©   (19.05.04 18:10)

потому что в парадоксе их нет :)


 
Mike Kouzmine ©   (2004-05-19 18:18) [15]

Там эмуляция. Таблицы не должны открываться, закрываться в течении всей транзакции. Иначе не работает. Вот как быть с ExecSql? Я не пробовал. Работает ли с запросами? Может для каждого запроса надо использовать свой TQuery?


 
ka ©   (2004-05-19 18:23) [16]

Как это нет. Елки палки - так это все полная лажа. Заечем вообще придумали парадокс.
Тогда следующий вопрос: на что менее болезнено можно перети.


 
Mike Kouzmine ©   (2004-05-19 18:24) [17]

FB


 
Johnmen ©   (2004-05-19 18:25) [18]

>на что менее болезнено можно перети.

Соловьев ©   (19.05.04 17:57) [9]

Хотя болевой попрог у каждого свой...:)


 
ka ©   (2004-05-19 18:28) [19]

Я же серьезно :-(((
Я никогда не писал базы данных до самой этой пурги. Вот и вляпался.


 
Соловьев ©   (2004-05-19 18:30) [20]


> [19] ka ©   (19.05.04 18:28)

если хочешь нормальные транзакции и бесплатно - [9]


 
ka ©   (2004-05-19 18:33) [21]

А что такое FireBird и где ее взять.


 
ka ©   (2004-05-19 19:07) [22]

Все равно спасибо всем кто помог.



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

Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.041 c
14-1085509938
тихий вовочка
2004-05-25 22:32
2004.06.13
Как работать с XML


1-1085725069
DimonNew
2004-05-28 10:17
2004.06.13
StringGrid и ...


3-1085144384
levova
2004-05-21 16:59
2004.06.13
Выполнение запроса из програмы (FireBird)


14-1085423991
Drakon
2004-05-24 22:39
2004.06.13
Новый движок форума


14-1085836974
Drakon
2004-05-29 17:22
2004.06.13
Перенос Linux-приложений на Linux





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский