![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Господа. помогите с транзакциями на InterBase... [D5, IB5.x]
VL © (2002-07-29 12:33:00)Может я чего-то не то делаю, но что-то не получается (если можно, помогите конкретным примером)
пишу вставку строки в таблицу
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 - если его зеремить, замедления не происходит.
Как убрать это замедление (если можно с примером)
VL (2002-07-29 14:27:00) [1]BAY
IBtransaction1 - это компонента, переменная или что?
BAY (2002-07-29 13:59:00) [2]>>VL © (29.07.02 13:48)
IBTransaction1.CommitRetaining вместо IBTransaction1.Commit
VL (2002-07-29 13:48:00) [3]BAY
кто такой IBtransaction1
ЮЮ (2002-07-29 13:45:00) [4]Естественно, для того и придуман прараметрический запрос, чтобы использовать параметры, а не переписывать заново.
Но и насчет транзакций - тоже дельный совет. Раза в 2 уменьшит время.
Ну, и наконец, может продумать INSET запрос для всех записей, дабы избавиться от цикла в программе?
BAY (2002-07-29 13:43:00) [5]IBtransaction1.CommitRetaining - и ругаться не будет.
IBTransaction1.StartTransaction - а это и не надо тогда, (достаточно один раз)
VL (2002-07-29 13:41:00) [6]ЮЮ - а если когда нет строки - она инсертится, а когда есть - апдэйтится, тогда это не прокатывает.
Тут нада транзакции открывать - а не получается.
Если у кого-то есть работающий пример - дайте.
VL (2002-07-29 13:38:00) [7]ЮЮ - а помогает?
VL (2002-07-29 13:36:00) [8]Записей может быть до 200тыс.
По поводу транзакций - идет ругня, непомню точно, но толи DataBase not in insert mode, толи edit mode, вообщем ругается.
Если у кого-то есть работающий пример транзакции - дайте.
S@shka (2002-07-29 13:29:00) [9]Предлагается делать следующее :)
Насколько я могу судить операцию INSERT необходимо подтверждать
IBTransaction1.StartTransaction;
{твой код}
........
{конец кода}
IBtransaction1.Commit;
Alexandr (2002-07-29 12:49:00) [10]а сколько записей-то вствляешь примерно, когда замедление начинает проявляться? 100? 1000? 10000? 1000000?
BAY (2002-07-29 12:45:00) [11]Попробуй свести к минимуму кол-во запрсов. Т.е. сначало составь весь запрос
insert into ...
insert into ...
...
insert into ...
а потом все разом всавь. Намного бысрее получиться.
ЮЮ (2002-07-29 12:37:00) [12]Зачем внутри цикла-то ???
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;