-
Есть стааааренькие dbf файлы. Для доступа к ним использую TQuery. Есть необходимость добавлять несколько записей транзакцией, т.е. если хоть одна не добавилась, всё откатываем. Каким образом это осуществить не подскажите? Всю жизнь работаю с MS SQL, а тут такое, никак не могу разобраться...
-
ну так посмотри в справке по BDE поддерживает ли он транзакции, вроде что то было...
-
посмотрю, ну во всяком случае в ограничения на dbase написно что поддерживает транзакции до 100 строк, значит что то должно быть. И в моей памяти всплывает что есть это в TTable. Там по моему какие то процедуры были для этого заточены, а вот в TQuery как?
-
> на dbase написно что поддерживает транзакции до 100 строк
В действительности так и есть.
Это даже транзакцией в полной мере назвать нельзя - всего лишь жалкое отдаленное подобие.
> в TQuery как?
Точно так же - попытка модификации 100 и более табличного файла (неважно что - добавление, апдейт или удаление) в контексте одной и той же ТА вызовет исключение.
-
> tipman (03.12.2008 14:26:02) [2]
Боюсь что и это относится только к Парадокс.
-
вообщем то моя транзакция НЕ на обработку 100 строк и более, а на добавление в среднем 10 строк, не более... Если при добавлении хоть одной из них возникло исключение (ну например есть такой ключ уже), откатываем всё добавленное. SQL запрос на добавление 10 строк одновременно в TQuery не проходит. Дело в том что в TQuery каждый DML оператор должен заканчиваться точкой с запятой, и после точки с запятой он не даёт ничего дописывать, т.е. свойство SQL в TQuery только один запрос, как я понимаю. Как именно организовать транзакцию в TQuery при работе с dbase?
-
> 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;
-
Спасибо Сергей, я уже разобрался сам только что. Пришёл написать что вопрос снят, а тут ответ...
Меня только и ткнуть то надо было на TDatabase, было бы достаточно. ADO пользую обычно, с BDE только вскользь...
Спасибо
-
Транзакции в большинстве локалок существуют только на уровне локальной буферизации. Т.е. "откат" сводится в сбросу изменений последних N записей. К транзакциям в истинном их понимании это имеет такое же отношение, как вареники к животноводству
-
> MsGuns © (03.12.08 16:48) [8]
Но также добавлений и удалений записей. Правда, если система "упадет", то ....
-
то будет больно.