Форум: "Базы";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Внизdbf -> interbase (2) Найти похожие ветки
← →
Фикус (2003-09-10 13:31) [0]Как можно ускорить процесс исполнения следующего кода:
begin
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
fam:=Table1.FieldByName("FAM").AsString;
im:=Table1.FieldByName("IM").AsString;
ot:=Table1.FieldByName("OT").AsString;
data:=Table1.FieldByName("DATA").AsString;
ser:=Table1.FieldByName("SER").AsString;
num:=Table1.FieldByName("NUM").AsString;
smo:=Table1.FieldByName("SMO").AsString;
IBQuery1.Active:=False;
IBQuery1.SQL.Text:="insert into person (FAM,IM,OT,DATA,SER,NUM,SMO) values (""+fam+"",""+im+"",""+ot+"",""+data+"",""+ser+"",""+num+"",""+smo+"")";
IBQuery1.Active:=True;
Table1.Next;
end;
Table1.Close;
end;
Заранее благодарен!
← →
Zacho (2003-09-10 13:44) [1]Вместо IBQuery использовать TIBSQL, а вместо динамического формирования запроса использовать параметризированный запрос. И еще, если записей много, то делать commit после каждых примерно 10000 записей. Да, на время этой операции в таблице person желательно отключит индексы, триггера и ограничения.
← →
Фикус (2003-09-10 13:45) [2][1] Zacho © (10.09.03 13:44)
Огромное спасибо за развернутый ответ! :)
← →
Alexandr (2003-09-10 13:47) [3]еще заменить FielDByName на более быстродействующее
TableFAM
или fields[1]
← →
Zacho (2003-09-10 13:49) [4]Да, еще пара замечаний. Вместо fam:=Table1.FieldByName("FAM") быстрее будет Table1.Fields[n]
И конечно, IBQuery1.Active:=True; - ошибочно.
← →
Zacho (2003-09-10 13:53) [5]
> Фикус © (10.09.03 13:45) [2]
Что-то надо объяснить более подробно ? Не стесняйся :) , скажи что именно.
← →
Danilka (2003-09-10 13:55) [6]например, вот-так, на вскидку, может можно и быстрее:
ibsql.transaction.StartTransaction;
ibsql.text:="insert into person (FAM,IM,OT,DATA,SER,NUM,SMO) values (:fam,:im,:ot,:data,:ser,:num,:smo)";
ibsql.prepare;
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
ibsql.params.vars[0].asString := Table1.Fields[0].AsString;
ibsql.params.vars[1].asString := Table1.Fields[1].AsString;
ibsql.params.vars[2].asString := Table1.Fields[2].AsString;
ibsql.params.vars[3].asString := Table1.Fields[3].AsString;
ibsql.params.vars[4].asString := Table1.Fields[4].AsString;
ibsql.params.vars[5].asString := Table1.Fields[5].AsString;
ibsql.params.vars[6].asString := Table1.Fields[6].AsString;
ibsql.ExecQuery;
Table1.Next;
end;
ibsql.transaction.Commit;
Table1.Close;
end;
может и не работает, не проверял... :))
но, думаю, смысл понятен.
← →
Danilka (2003-09-10 13:56) [7]хех, пока сочинял уже и ответили..
← →
Фикус (2003-09-10 14:11) [8]Спасибо всем ответившим!
[6] Danilka © (10.09.03 13:55)
Отдельное спасибо за время потраченное на написание кода. Смысл понятен :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.015 c