Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно делать транзакции при удалении/создании таблиц? [D7, MSSQL]


Zelius ©   (2003-02-27 14:57:00) 

Хочу сделать что-то типа этого:

StartTransaction;
try
DropTable;
CreateTable;
OpenTable;
FillTable;
Commit;
except
Rollback;
raise;
end;

Но она не дает открыть таблицу после ее создания! Если транзакцию убрать, то все работает!


Zelius   (2003-02-27 19:01:00) [1]

Johnmen - спасибо! ответ меня устраивает!


ermserg   (2003-02-27 18:15:00) [2]

Mne ne legche :)
Eto ne seryozno.

begin transaction;
create table tbl(clmn int);
commit transaction; - posle etogo tablitsa suschestvuyet, potomu-chto CREATE v realnosti bilo, NO

begin transaction;
create table tbl(clmn int);
rollback transaction; - posle etogo tablitsi net, potomu-chto CREATE v realnosti ne bilo.

Ya eto pravilno ulovil?


Johnmen   (2003-02-27 17:57:00) [3]

Я устал...Мне тяжело...:)

>Tablitsi ne budet.

Вот я и пытаюсь (но видимо безуспешно) намекнуть, что ее не будет не потому, что выполнен настоящий rollback, а потому, что никакого create в реальности вообще не было !


ermserg   (2003-02-27 17:29:00) [4]

>О реальных или об их эмулировании ?

Ya znayu yavno-startuyemiye i neyavno-startuyemiye. Chto takoye emulirovanniye?

> И что будет, если в ее рамках делаем CREATE TABLE...а потом ROLLBACK

Tablitsi ne budet.


Johnmen   (2003-02-27 17:06:00) [5]

>ermserg © (27.02.03 16:50)

Еще раз. О каких транзакциях мы говорим ? О реальных или об их эмулировании ?
Если не сложно, попробуй все-таки отмониторить запросы...

>Desdechado © (27.02.03 16:55)

Ну допустим стартовали транзакцию. И что будет, если в ее рамках делаем CREATE TABLE...а потом ROLLBACK ?


Desdechado   (2003-02-27 16:55:00) [6]

>DDL команды (типа DROP, CREATE) выполняются вне контекста
>пользовательских транзакций.
не совсем так. DDL-команды нужно выполнять в отдельных транзакциях. Просто иначе при попытке обращения к таблице она еще не известна серверу и, след., будет ошибка.


ermserg   (2003-02-27 16:50:00) [7]

Kak eto pri-chom? Trabsaktsiya mozhet soderzhat i DDL komandi i DML. I vse izmeneniya sdellanniye v transaktsii - i INSERT INTO i CREATE TABLE budut ili commit ili rollback.


Johnmen   (2003-02-27 16:29:00) [8]

И что ? Ну глянул... И причем здесь это ?
Может просто запустить какой-нибудь SQL Monitor да и отследить приходящие к базе запросы ? Я бы попробовал, да только нет MSSQL и ADO не пользуюсь, да и не нужно это мне, по большому счету...:)))


ermserg   (2003-02-27 16:04:00) [9]

Ti ne prav. Tolko-chto nashol:
ADOConnection.Properties["Transaction DDL"] := ...

vozmozhniye znachinya sm - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adosql/adoprg04_83jt.asp

Nuzhno bit uverennim, chto ispolzuyemiy provider podderzhivayet dannoye svoystvo.


Johnmen   (2003-02-27 15:44:00) [10]

...но могу с большой степень достоверности предположть, что все запросы между BeginTrans и RollbackTrans просто ложатся в кеш и реальноне выполняютя...


Johnmen   (2003-02-27 15:39:00) [11]

Ну я не знаю, что скрывается за методом BeginTrans для ADOConnection и за остальными, стоят ли за ними реальные транзакции...


ermserg   (2003-02-27 15:34:00) [12]

to Johnmen:
ne uveren. Vot takoye rabotayet na MSSQL2000 s OLE DB Provider:

ADOQuery1.Connection := ADOConnection1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOConnection1.BeginTrans;
ADOQuery1.SQL.add("create table t3(t3 int);");
ADOQuery1.ExecSQL;
ADOConnection1.RollbackTrans;

v itoge tablitsi t3 ne suschestviyet. Vozvozhno zavisit on DBE i providera?


Johnmen   (2003-02-27 15:09:00) [13]

DDL команды (типа DROP, CREATE) выполняются вне контекста пользовательских транзакций.
Значит, здесь они не имеют никакого смысла...


Наверх

Титульная страница Поиск, карта сайта Написать письмо