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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
1-96190
rh
2003-09-16 07:16
2003.09.29
Работа с потоками


1-96206
malamba
2003-09-18 10:37
2003.09.29
Настройки программы - treeview и поля к нему


1-96274
IGORYOK
2003-09-16 10:30
2003.09.29
У меня не работает FindControl на форме и FindComponent на панели


3-96060
tim
2003-09-10 13:16
2003.09.29
вернуть список параметров хранимой процедуры


14-96437
Кен
2003-08-21 04:56
2003.09.29
---|Ветка была без названия|---