Форум: "Базы";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
ВнизКак правильно делать транзакции при удалении/создании таблиц? Найти похожие ветки
← →
Zelius (2003-02-27 14:57) [0]Хочу сделать что-то типа этого:
StartTransaction;
try
DropTable;
CreateTable;
OpenTable;
FillTable;
Commit;
except
Rollback;
raise;
end;
Но она не дает открыть таблицу после ее создания! Если транзакцию убрать, то все работает!
← →
Johnmen (2003-02-27 15:09) [1]DDL команды (типа DROP, CREATE) выполняются вне контекста пользовательских транзакций.
Значит, здесь они не имеют никакого смысла...
← →
ermserg (2003-02-27 15:34) [2]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:39) [3]Ну я не знаю, что скрывается за методом BeginTrans для ADOConnection и за остальными, стоят ли за ними реальные транзакции...
← →
Johnmen (2003-02-27 15:44) [4]...но могу с большой степень достоверности предположть, что все запросы между BeginTrans и RollbackTrans просто ложатся в кеш и реально не выполняютя...
← →
ermserg (2003-02-27 16:04) [5]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 16:29) [6]И что ? Ну глянул... И причем здесь это ?
Может просто запустить какой-нибудь SQL Monitor да и отследить приходящие к базе запросы ? Я бы попробовал, да только нет MSSQL и ADO не пользуюсь, да и не нужно это мне, по большому счету...:)))
← →
ermserg (2003-02-27 16:50) [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.
← →
Desdechado (2003-02-27 16:55) [8]>DDL команды (типа DROP, CREATE) выполняются вне контекста
>пользовательских транзакций.
не совсем так. DDL-команды нужно выполнять в отдельных транзакциях. Просто иначе при попытке обращения к таблице она еще не известна серверу и, след., будет ошибка.
← →
Johnmen (2003-02-27 17:06) [9]>ermserg © (27.02.03 16:50)
Еще раз. О каких транзакциях мы говорим ? О реальных или об их эмулировании ?
Если не сложно, попробуй все-таки отмониторить запросы...
>Desdechado © (27.02.03 16:55)
Ну допустим стартовали транзакцию. И что будет, если в ее рамках делаем CREATE TABLE...а потом ROLLBACK ?
← →
ermserg (2003-02-27 17:29) [10]>О реальных или об их эмулировании ?
Ya znayu yavno-startuyemiye i neyavno-startuyemiye. Chto takoye emulirovanniye?
> И что будет, если в ее рамках делаем CREATE TABLE...а потом ROLLBACK
Tablitsi ne budet.
← →
Johnmen (2003-02-27 17:57) [11]Я устал...Мне тяжело...:)
>Tablitsi ne budet.
Вот я и пытаюсь (но видимо безуспешно) намекнуть, что ее не будет не потому, что выполнен настоящий rollback, а потому, что никакого create в реальности вообще не было !
← →
ermserg (2003-02-27 18:15) [12]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?
← →
Zelius (2003-02-27 19:01) [13]Johnmen - спасибо! ответ меня устраивает!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c