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

Вниз

Вопрос в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
3-1103765055
Vader
2004-12-23 04:24
2005.01.30
ADO и dbExpress использование для локальных БД


3-1104141098
PSH
2004-12-27 12:51
2005.01.30
Разрыв страницы в Report Builder Pro 7.03


6-1100461402
dimm
2004-11-14 22:43
2005.01.30
сеть под MSDOS


1-1105949734
VID
2005-01-17 11:15
2005.01.30
Как отключить автоматический горизонтальный скроллинг в TreeView


3-1104145015
DimaK
2004-12-27 13:56
2005.01.30
Backup базы Firebird