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

Вниз

Вопрос в IBX...   Найти похожие ветки 

 
DimaK   (2004-12-29 09:39) [0]

Как сделать кучу insert в одной транзакции.
Пока я делаю так:
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add("insert .....");
IBQuery1.ExecSQL;
IBQuery1.Close;
- это для каждого инсерта. Пытался запихать несколько строк IBQuery1.SQL - он начинает ругаться на второй строке типа "token "insert" unknown" что то.
А как я вижу у меня Commit происходит после каждого IBQuery1.ExecSQL. А хотелось бы делать commit после последнего инсерта (или Rollback). Вообще на IBX как такое организуется? Можно примерчик?


 
Johnmen ©   (2004-12-29 09:53) [1]

Так управляй транзакциями сам. В чем проблема то ?
И см. IBScript.


 
msguns ©   (2004-12-29 11:05) [2]

>DimaK   (29.12.04 09:39)
>IBQuery1.Close;

А вот это-то зачем ?

>А как я вижу у меня Commit происходит после каждого IBQuery1.ExecSQL

Каким образом видишь ? Может в контексте той же транзакции, которой меняешь, а Read_commited отсутствует ?

Классический правильный способ работы с IB: две транзакции - одна "долгоиграющая" читает (TIBQueryes), другая кратковременная пишущая (TIBSQL`s). После каждой записи - завершение транзакции. Схема, конечно, упрощенная, но верно отражает принцип разделения обмена данными с клиентами на 2 основные целостные группы: только читающую и только модифицирующую.


 
msguns ©   (2004-12-29 11:15) [3]

Параметры "читающей" транзакции:
 Read (не обязательно)
 Read_commited,
 NoWait

И "пишущей":
 Write
 Concurrency
 NoWait

"Читающая" транзакция может быть открыта длительное время, она практически не тормозит сервер. В ее контексте можно читать данные для визуализации произвольного кол-ва таблиц (вьюх)
"Пишущая" транзакция используется для проведения одиночных либо каскадных (цепочных) целостных модификаций в одной либо группе логически связанных таблиц. По завершению каждой целостной модификации либо по краху в любой ее части транзакцию коммитить либо откатывать явно (Commit/RollBack без Retaining).

Есть, правда, случаи использования одной транзакции для чтения и модификации "в одном стакане", например, обслуживание справочника или автономной таблицы БД. В этом случае транзакция завершается после попытки изменения без завершения (точнее с рестартом): CommitRetaining/RollBackRetaining


 
msguns ©   (2004-12-29 11:18) [4]

Да, забыл добавить: после подтверждения "пишущей" транзакции все визуализированные НД, открытие в контексте "читающей" транзакции, необходимо переоткрывать (имеются в виду те НД, которые содержат данные, потенциально модифицированные "пишущей" транзакцией) или профетчивать.


 
Johnmen ©   (2004-12-29 11:45) [5]

>msguns ©   (29.12.04 11:05) [2]
>После каждой записи - завершение транзакции

Уточню, что при массовой вставке завершать надо после 100-500 записей. Отключить индексы. Отключить ForceWrite.


 
Sergey13 ©   (2004-12-29 11:47) [6]

2[5] Johnmen ©   (29.12.04 11:45)
>Отключить индексы. Отключить ForceWrite.
Ну это наверное только при оч-ч-ч-чень массовой. 8-)


 
Johnmen ©   (2004-12-29 11:49) [7]

>Sergey13 ©   (29.12.04 11:47) [6]
>Ну это наверное только при оч-ч-ч-чень массовой. 8-)

Ну да. При очень массовой и нерегулярной :)


 
msguns ©   (2004-12-29 11:52) [8]

>Johnmen ©   (29.12.04 11:45) [5]
>Уточню, что при массовой вставке завершать надо после 100-500 записей. Отключить индексы. Отключить ForceWrite.

Жень, давай вместе прочитаем еще раз [3]:

"Пишущая" транзакция используется для проведения одиночных либо каскадных (цепочных) целостных модификаций в одной либо группе логически связанных таблиц. По завершению каждой целостной модификации либо по краху в любой ее части транзакцию коммитить либо откатывать явно (Commit/RollBack без Retaining).

Если в понятие "целостности" входит как частный случай, вставка 500 записей, значит именно после 500-й и надо коммитить.

Что-то ты сегодня не в форме. Вчера в старкрафт переиграл ? ;)


 
Johnmen ©   (2004-12-29 12:00) [9]

>msguns ©   (29.12.04 11:52) [8]

Нет-нет, именно при массовой вставке, ничего с целостностью не имеющей. Т.к. "целостность" в данном случае это вставка всех записей.

>Вчера в старкрафт переиграл ? ;)

Не совсем... Реплеев пересмотрел...:)


 
DimaK   (2004-12-29 15:53) [10]

Спасибо, вроде разобрался.
И тогда еще вопрос по транзакциям: посоветуйте параметры транзакции, на которой IBStoredProc1 висит, и который возвращает всего 10 параметров по результатам кучи запросов и не производит никакие изменения с таблицей (ну короче хитрые суммы для отчета считает). И вообще ничего если его посадить на ту же "читающую" транзакцию на которой висят просматриваемые таблицы (вьюхи)?


 
Max Zyuzin ©   (2004-12-29 16:46) [11]

>DimaK   (29.12.04 15:53) [10]
Вполне, она ж у тебя читает... прочитай еще раз msguns ©   (29.12.04 11:05) [2] очень полезный совет



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

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

Наверх




Память: 0.47 MB
Время: 0.034 c
14-1105623760
Kerk
2005-01-13 16:42
2005.01.30
Философская сторона модерирования


1-1105679758
Nik8.
2005-01-14 08:15
2005.01.30
Почему функция неверно считает?


1-1105956981
vega
2005-01-17 13:16
2005.01.30
TXMLDocument преобразовывается в дом...


1-1105900470
Fofka
2005-01-16 21:34
2005.01.30
Скрытое приложение


9-1098852156
Malefic
2004-10-27 08:42
2005.01.30
Asphyre и PowerDraw: Почему спрайт коряво перемещается?





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