Текущий архив: 2003.04.03;
Скачать: CL | DM;
ВнизОптимизация кода Найти похожие ветки
← →
sterran (2003-03-17 12:32) [0]Привет всем. Уважаемые мастера помогите с оптимизацией кода. У меня есть две таблицы первая содержит два поля: Номер телефона и почтовое отделение (данные обеих полей уже заполнены), вторая также содержит Номер телефона и почтовое отделение (поле номер телефона заполнен, а вот отделение связи необходимо вытощить с первой таблице), т.е. две таблицы необходимо как бы синхронизировать. Я поступаю следующим образом
...
table2.first;
while not table2.eof do begin
if table1.locate("PHONE",table2.FieldByName("PHONE").AsString.[loCaseInsensitive, loPartialKey])
then
begin
table2.Edit;
table2.FieldByName("POST").AsString: = table1.FieldByName("POST").AsString;
table2.Post;
end;
table2.Next;
end;
...
вроде бы нормально, вот только если таблицы содержать по 50000 записей, время обработки увеличивается до 20 мин и более, может кто подскажает что-нибудь по умнее
За ранее благодарен.
← →
stone (2003-03-17 12:37) [1]Для таких целей существует связь Master-Detail, смотри MasterSource
← →
myor (2003-03-17 12:37) [2]похоже на разовую задачу (перенести значения из оюной таблицы в другую). тогда, может, лучше:
update table2
set postoffice=(select postoffice
from table1
where phone=table2.phone);
← →
Johnmen (2003-03-17 12:40) [3]UPDATE Table2 T2 SET T2.почтовое отделение=
(SELECT T1.почтовое отделение WHERE
T1.Номер телефона=T2.Номер телефона FROM Table1 T1)
← →
Anatoly Podgoretsky (2003-03-17 12:40) [4]Надо сделать master-detail связь по полю PHONE и надобность в table1.locate полностью пропадет. В жтом случае вместо декартового произведения, будет простое линейное while not table2.eof do begin
← →
sterran (2003-03-17 12:42) [5]Все понял спасибо
Страницы: 1 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.007 c