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

Вниз

Не получается транзакция :(   Найти похожие ветки 

 
Романов Р.В.   (2003-01-23 22:15) [0]

Выполняю запрос

Delete
from test1.db
where (N = 30)

через процедуру ExecErr при i = 0. Ошибка генерируется переходим на db1.Rollback, но записи из таблицы все равно удаляются.

procedure TForm1.ExecErr(i: Integer);
begin
db1.StartTransaction;
try
Query1.SQL.Clear;
Query1.SQL.Text := Memo1.Text;
Query1.ExecSQL;
ShowMessage(IntTostr(10 div i));
db1.Commit;
except
db1.Rollback;
end;
end;

При стандартных настройках компонента DataBase в строке
db1.StartTransaction
появлялась ошибка "The transaction isolation level must be dirtly read for local databases".
Я поставил TransIsolation в tiDirtyRead.

Что я делаю неправильно?


 
Johnmen   (2003-01-24 01:19) [1]

Принципиально неверна идеология... Понятие транзакций в истинном смысле неприменима к локальным СУБД.


 
Романов Р.В.   (2003-01-24 05:13) [2]

А как мне тогда удалить строки из нескольких таблиц что бы при этом была возможность в случае ошибки вернуть все на место?


 
ЮЮ   (2003-01-24 07:01) [3]

Если уж решился их удалять, зачем возврашать?
И какая ошибка может возникнуть по ходу удаления записей?


 
Романов Р.В.   (2003-01-24 15:21) [4]

Тоесть получается что в локальных базах транзакции не работают?


 
Johnmen   (2003-01-24 16:47) [5]

>Романов Р.В. ©

Не работают, ввиду своего отсутствия...:)


 
Романов Р.В.   (2003-01-24 16:51) [6]

Печально. Я хотел начать с малого (с локальных баз). Придется ставить какой нибуть сервер.


 
Johnmen   (2003-01-24 16:59) [7]

Начинать лучше сразу с большого, в смысле серьезного...
Я бы рекомендовал IB и клоны...


 
Mike Kouzmine   (2003-01-24 17:22) [8]

А св-во databasename у query1 какое?
if db1.intransaction then db1.rollback (or commit)
db1.starttransaction
....
if db1.intransaction then db1.commit;
except
if db1.intransaction then db1.rollback
...
Должно работать. (у меня работает), правда если удаляет больше 255 записей, все это не катит


 
Романов Р.В.   (2003-01-26 10:45) [9]


> А св-во databasename у query1 какое?

Такое же как у db1. Но если вы утверждаете что если удаляет больше 255 записей, все это не катит применять такую транзакцию не имеет смысла.


 
Pat   (2003-01-26 16:01) [10]

Некоторые локальные базы данных, такие как Paradox 9, также могут поддерживать транзакции. © Стив Тейксейра. Delphi 5. Руководство разработчика. Том 2


 
Романов Р.В.   (2003-01-26 16:21) [11]

У меня Paradox 7. Интересно, а из чего состот локальная база, кроме каталога с файлами таблиц. Наверне какие-то dll еще есть?


 
Pat   (2003-01-26 17:17) [12]

>Наверне какие-то dll еще есть?
Для самой БД нет...dll"ки - драйвера для работы с твоей БД (BDE, например)


 
Романов Р.В.   (2003-01-26 17:38) [13]

Тогда почему транзакции могут работать только с Paradox 9. Дело в драйверах или в формате файлов таблиц?


 
MsGuns   (2003-01-26 23:58) [14]

Дело в BDE, которая транзакции не поддерживает


 
Pat   (2003-01-27 14:47) [15]

>Дело в BDE, которая транзакции не поддерживает

procedure TForm1.ApplyButtonClick(Sender: TObject);

begin
with CustomerQuery do
begin
Database1.StartTransaction;
try
ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates; {on success, clear the cache}
end;

end;


 
Mike Kouzmine   (2003-01-27 15:13) [16]


> А св-во databasename у query1 какое?

>>Такое же как у db1.

А должно быть не такое как у Db1, а именно оно (Db1)


 
Johnmen   (2003-01-27 15:22) [17]

>Pat ©

Можно поподробнее про транзакции применительно к Парадоксу ?
:))))


 
Romkin   (2003-01-27 15:31) [18]

Транзакции в PDox через BDE не позволяют изменять более 255 записей (точнее, позволяют, ошибки не даст, вот только результат непредсказуем).


 
MsGuns   (2003-01-27 16:03) [19]

>Pat © (27.01.03 14:47)

Ага, и это если формат - парадокс (дибэйс, фокс) ?

"Транзакционные" методы есть у компонентов BDE потому, что она типа универсальная и может работать не только с "родными" форматами, но и с "чужеродными", например, клиент-серверными СУБД. Вот во втором случае, если сервер поддержит такой запрос, он и будет выполнен ! Кстати, в хэлпах по БДЕ очень неплохо об этом написано. В частности посоветую попристальнее изучить методыи св-ва TSession и TDataBase (TransIsolation, InTransaction, KeepConnection, для начала)

Для локалок же это по большому счету-фикция. Единственное, что можно "изобразить" похожее на "групповуху" - это манипулирование буферами, куда предварительно пишется/считывается порция записей.
Но и здесь облом, т.к. ограничение ОДИН БУФЕР-ОДНА ТАБЛИЦА в корне ломает логику ступенчатых модификаций.

В 9-м парадоксе, похоже, соорудили чегой-то эмулирующее цепочки запросов и, работающее, скорее всего, через тот же механизм буферов. Но это, увы, не СЕРВЕР.

А впрочем, никто не мешает верить в доброе, вечное...
Флаг в руки ;))


 
Mike Kouzmine   (2003-01-27 16:11) [20]

При использовании "транзакций" (парадокс, дбайз, фокс) создается таблица с описанием операций, на основании их и производится откат, а ограничение на 255 записей - это или поле типа байт, накладывает ограничение или (что более вероятно) не стали морочиться, а то получилась бы неповоротливая конструкция.


 
Романов Р.В.   (2003-01-27 16:30) [21]


> А должно быть не такое как у Db1, а именно оно (Db1)


У меня так сделано.

db1..AliasName = "testb"
db1.DatabaseName = "qwe"
Query1.DatabaseName = "qwe"



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

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

Наверх





Память: 0.49 MB
Время: 0.013 c
1-38375
AALLEEXX
2003-02-04 09:27
2003.02.13
СООБЩЕНИЕ ВИНДЫ2000


1-38366
Leo_pr
2003-02-04 10:20
2003.02.13
Диалог !!!


1-38335
___ALex___
2003-02-02 16:44
2003.02.13
Vertival Scroll Bar


3-38045
Vlad_503
2003-01-29 13:27
2003.02.13
Конвертация таблицы Exel


1-38189
Andrey-k
2003-02-02 22:45
2003.02.13
Help. Exel. Как сделать WorkBook в Read-Only или запаролить?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский