Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: 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 вся ветка

Текущий архив: 2002.08.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
14-60826
J_S
2002-07-22 11:52
2002.08.19
ActiveX в компонент


1-60564
KF
2002-08-06 04:57
2002.08.19
Пароли Outlook


3-60519
AlexDulub
2002-07-30 00:55
2002.08.19
Работа с ADO


1-60623
BJValentine
2002-08-08 16:53
2002.08.19
Splash Form


3-60532
ShuraGrp
2002-07-30 11:55
2002.08.19
Трабла с For select ...