Вниз
Скачать: CL | DM;

Господа. помогите с транзакциями на InterBase...   Найти похожие ветки 

← →
VL ©   (2002-07-29 12:33) [0]

Может я чего-то не то делаю, но что-то не получается (если можно, помогите конкретным примером)

пишу вставку строки в таблицу

while not query0.eof do
begin
query1.sql.clear;
query1.sql.add("insert into TABLE values (:p0,:p1,:p2,:p3)");
query1.params[0].asinteger := 1;
...
query1.params[3].asstring := "1";
query1.execsql;
end;

сей код в начале вставляет очень быстро, а потом замедляется,замедляется и замедляется.
Причем, замедляется именно на INSERT - если его зеремить, замедления не происходит.
Как убрать это замедление (если можно с примером)


← →
ЮЮ   (2002-07-29 12:37) [1]

Зачем внутри цикла-то ???
query1.sql.clear;
query1.sql.add("insert into TABLE values (:p0,:p1,:p2,:p3)");
query1.params[0].asinteger := 1;
...
query1.params[3].asstring := "1";


while not query0.eof do
begin
query1.params[1].asinteger := 1;
query1.params[2].asstring := "1";

query1.execsql;
end;


← →
BAY ©   (2002-07-29 12:45) [2]

Попробуй свести к минимуму кол-во запрсов. Т.е. сначало составь весь запрос
insert into ...
insert into ...
...
insert into ...
а потом все разом всавь. Намного бысрее получиться.


← →
Alexandr ©   (2002-07-29 12:49) [3]

а сколько записей-то вствляешь примерно, когда замедление начинает проявляться? 100? 1000? 10000? 1000000?


← →
S@shka ©   (2002-07-29 13:29) [4]

Предлагается делать следующее :)
Насколько я могу судить операцию INSERT необходимо подтверждать
IBTransaction1.StartTransaction;
{твой код}
........
{конец кода}
IBtransaction1.Commit;


← →
VL ©   (2002-07-29 13:36) [5]

Записей может быть до 200тыс.

По поводу транзакций - идет ругня, непомню точно, но толи DataBase not in insert mode, толи edit mode, вообщем ругается.

Если у кого-то есть работающий пример транзакции - дайте.


← →
VL ©   (2002-07-29 13:38) [6]

ЮЮ - а помогает?


← →
VL ©   (2002-07-29 13:41) [7]

ЮЮ - а если когда нет строки - она инсертится, а когда есть - апдэйтится, тогда это не прокатывает.

Тут нада транзакции открывать - а не получается.
Если у кого-то есть работающий пример - дайте.


← →
BAY ©   (2002-07-29 13:43) [8]

IBtransaction1.CommitRetaining - и ругаться не будет.
IBTransaction1.StartTransaction - а это и не надо тогда, (достаточно один раз)


← →
ЮЮ   (2002-07-29 13:45) [9]

Естественно, для того и придуман прараметрический запрос, чтобы использовать параметры, а не переписывать заново.
Но и насчет транзакций - тоже дельный совет. Раза в 2 уменьшит время.
Ну, и наконец, может продумать INSET запрос для всех записей, дабы избавиться от цикла в программе?


← →
VL ©   (2002-07-29 13:48) [10]

BAY
кто такой IBtransaction1


← →
BAY ©   (2002-07-29 13:59) [11]

>>VL © (29.07.02 13:48)
IBTransaction1.CommitRetaining вместо IBTransaction1.Commit


← →
VL ©   (2002-07-29 14:27) [12]

BAY
IBtransaction1 - это компонента, переменная или что?




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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.013 c
6-60791
Valeriy
2002-05-31 22:44
2002.08.19
Проверка почты


14-60830
Dimich1978
2002-07-24 10:58
2002.08.19
Вопрос по прпограмме


3-60506
DAO
2002-07-27 21:40
2002.08.19
Как прервать процесс соединения TADOConnection с MSSQL?


3-60538
MikeFW
2002-07-30 10:27
2002.08.19
Построение (прохождение) все ветвей дерева


1-60740
i_pashkov
2002-08-07 12:06
2002.08.19
Приложение запущено из-под Delpi IDE или как отдельный файл?




   Наверх