Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

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

 
tipman   (2008-12-03 13:56) [0]

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


 
sniknik ©   (2008-12-03 14:06) [1]

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


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

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


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


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


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


> в TQuery как?


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


 
Anatoly Podgoretsky ©   (2008-12-03 15:03) [4]

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

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


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

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


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


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


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


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

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

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


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

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

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

Спасибо


 
MsGuns ©   (2008-12-03 16:48) [8]

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


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


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

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


 
Anatoly Podgoretsky ©   (2008-12-04 11:22) [10]

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



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

Текущий архив: 2009.10.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1250148554
Alex_Ford
2009-08-13 11:29
2009.10.18
Программно установить cbCustomColor для ColorBox равным True


2-1250081231
Dmitry1987
2009-08-12 16:47
2009.10.18
TADOTable


2-1250702557
Штрихкодер
2009-08-19 21:22
2009.10.18
разделитель разрядов в StringGrid1


15-1250152317
Наиль
2009-08-13 12:31
2009.10.18
Запрет продаж MS Word


2-1250417006
Smile
2009-08-16 14:03
2009.10.18
"Задисейблить" системную кнопку закрытия формы