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

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

Транзакция в dbase [D7, dBase, FoxPro]


tipman ©   (2008-12-03 13:56:00) 

Есть стааааренькие dbf файлы. Для доступа к ним использую TQuery. Есть необходимость добавлять несколько записей транзакцией, т.е. если хоть одна не добавилась, всё откатываем. Каким образом это осуществить не подскажите? Всю жизнь работаю с MS SQL, а тут такое, никак не могу разобраться...


Anatoly Podgoretsky   (2008-12-04 11:22:00) [1]

то будет больно.


Виталий Панасенко   (2008-12-04 09:20:00) [2]


> MsGuns ©   (03.12.08 16:48) [8]

Но также добавлений и удалений записей. Правда, если система "упадет", то ....


MsGuns   (2008-12-03 16:48:00) [3]

Транзакции в большинстве локалок существуют только на уровне локальной буферизации. Т.е. "откат" сводится в сбросу изменений последних N записей. К транзакциям в истинном их понимании это имеет такое же отношение, как вареники к животноводству


tipman   (2008-12-03 15:45:00) [4]

Спасибо Сергей, я уже разобрался сам только что. Пришёл написать что вопрос снят, а тут ответ...

Меня только и ткнуть то надо было на TDatabase, было бы достаточно. ADO пользую обычно, с BDE только вскользь...

Спасибо


Сергей М.   (2008-12-03 15:39:00) [5]


> TQuery каждый DML оператор должен заканчиваться точкой с
> запятой, и после точки с запятой он не даёт ничего дописывать


> свойство SQL в TQuery только один запрос, как я понимаю.
>  Как именно организовать транзакцию в TQuery


В огороде бузина, а в Киеве дядька.

Возможности или невозможности TQuery никакне связаны ни с транзакциями вообще ни с ТА в dBase/FoxPro в частности.

Database.StartTransaction;
try  
 for i := 1 to 10do begin    
    Query.Params[..].Value := ..;
    Query.Params[..].Value := ..;
    Query.Params[..].Value := ..;
    Query.ExecSQL;    
 end;
 Database.Commit;
except
 Database.Rollback;
end;


tipman   (2008-12-03 15:13:00) [6]

вообщем то моя транзакция НЕ на обработку 100 строк и более, а на добавление в среднем 10 строк, не более... Если при добавлении хоть одной из них возникло исключение (ну например есть такой ключ уже), откатываем всё добавленное. SQL запрос на добавление 10 строк одновременно в TQuery не проходит. Дело в том что в TQuery каждый DML оператор должен заканчиваться точкой с запятой, и после точки с запятой он не даёт ничего дописывать, т.е. свойство SQL в TQuery только один запрос, как я понимаю. Как именно организовать транзакцию в TQuery при работе с dbase?


Anatoly Podgoretsky   (2008-12-03 15:03:00) [7]

> tipman  (03.12.2008 14:26:02)  [2]

Боюсь что и это относится только к Парадокс.


Сергей М.   (2008-12-03 14:34:00) [8]


> на dbase написно что поддерживает транзакции до 100 строк


В действительности так и есть.
Это даже транзакцией в полной мере назвать нельзя - всего лишь жалкое отдаленное подобие.


> в TQuery как?


Точно так же - попытка модификации 100 и более табличного файла (неважно что - добавление, апдейт или удаление) в контексте одной и той же ТА вызовет исключение.


tipman   (2008-12-03 14:26:00) [9]

посмотрю, ну во всяком случае в ограничения на dbase написно что поддерживает транзакции до 100 строк, значит что то должно быть. И в моей памяти всплывает что есть это в TTable. Там по моему какие то процедуры были для этого заточены, а вот в TQuery как?


sniknik   (2008-12-03 14:06:00) [10]

ну так посмотри в справке по BDE поддерживает ли он транзакции, вроде что то было...


Наверх

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