Конференция "Базы" » Транзакция в dbase [D7, dBase, FoxPro]
 
  • tipman (03.12.08 13:56) [0]
    Есть стааааренькие dbf файлы. Для доступа к ним использую TQuery. Есть необходимость добавлять несколько записей транзакцией, т.е. если хоть одна не добавилась, всё откатываем. Каким образом это осуществить не подскажите? Всю жизнь работаю с MS SQL, а тут такое, никак не могу разобраться...
  • sniknik © (03.12.08 14:06) [1]
    ну так посмотри в справке по BDE поддерживает ли он транзакции, вроде что то было...
  • tipman (03.12.08 14:26) [2]
    посмотрю, ну во всяком случае в ограничения на dbase написно что поддерживает транзакции до 100 строк, значит что то должно быть. И в моей памяти всплывает что есть это в TTable. Там по моему какие то процедуры были для этого заточены, а вот в TQuery как?
  • Сергей М. © (03.12.08 14:34) [3]

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


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


    > в TQuery как?


    Точно так же - попытка модификации 100 и более табличного файла (неважно что - добавление, апдейт или удаление) в контексте одной и той же ТА вызовет исключение.
  • Anatoly Podgoretsky © (03.12.08 15:03) [4]
    > tipman  (03.12.2008 14:26:02)  [2]

    Боюсь что и это относится только к Парадокс.
  • tipman (03.12.08 15:13) [5]
    вообщем то моя транзакция НЕ на обработку 100 строк и более, а на добавление в среднем 10 строк, не более... Если при добавлении хоть одной из них возникло исключение (ну например есть такой ключ уже), откатываем всё добавленное. SQL запрос на добавление 10 строк одновременно в TQuery не проходит. Дело в том что в TQuery каждый DML оператор должен заканчиваться точкой с запятой, и после точки с запятой он не даёт ничего дописывать, т.е. свойство SQL в TQuery только один запрос, как я понимаю. Как именно организовать транзакцию в TQuery при работе с dbase?
  • Сергей М. © (03.12.08 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 (03.12.08 15:45) [7]
    Спасибо Сергей, я уже разобрался сам только что. Пришёл написать что вопрос снят, а тут ответ...

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

    Спасибо
  • MsGuns © (03.12.08 16:48) [8]
    Транзакции в большинстве локалок существуют только на уровне локальной буферизации. Т.е. "откат" сводится в сбросу изменений последних N записей. К транзакциям в истинном их понимании это имеет такое же отношение, как вареники к животноводству
  • Виталий Панасенко (04.12.08 09:20) [9]

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

    Но также добавлений и удалений записей. Правда, если система "упадет", то ....
  • Anatoly Podgoretsky © (04.12.08 11:22) [10]
    то будет больно.
 
Конференция "Базы" » Транзакция в dbase [D7, dBase, FoxPro]
Есть новые Нет новых   [134477   +39][b:0][p:0]