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

Вниз

Увеличение скорости обработки данных   Найти похожие ветки 

 
sally   (2006-01-05 11:47) [0]

В Microsoft DTS очень быстро происходит "перекачка" данных с "источника" в "назначение". 14000 записей залетают за 1-2 секунду(из DBF в SQL Server). За счет чего достигается такая скорость.
Код максимально простой.

var
 AsF1, AsF2, AsF3, AsF4, AsF5, AsF6, AsF7: TField;
 AdF1, AdF2, AdF3, AdF4, AdF5, AdF6, AdF7: TField;
begin
 ADOConnection1.Execute("truncate table COM_PAYERSRECIVER");
 VKDBFNTX1.Open;
 ADOTable1.Open;
 AsF1 := VKDBFNTX1.FindField("ID");
 AsF2 := VKDBFNTX1.FindField("CODE");
 AsF3 := VKDBFNTX1.FindField("NAME");
 AsF4 := VKDBFNTX1.FindField("UNN");
 AsF5 := VKDBFNTX1.FindField("OKPO");
 AsF6 := VKDBFNTX1.FindField("LICENS");
 AsF7 := VKDBFNTX1.FindField("PHONE");

 AdF1 := ADOTable1.FindField("ID");
 AdF2 := ADOTable1.FindField("PAYERSCODE");
 AdF3 := ADOTable1.FindField("PAYERSNAMES");
 AdF4 := ADOTable1.FindField("UNN");
 AdF5 := ADOTable1.FindField("OKPO");
 AdF6 := ADOTable1.FindField("LICENS");
 AdF7 := ADOTable1.FindField("PHONE");
 while not VKDBFNTX1.Eof do
 begin
   ADOTable1.Append;
   //ADOTable1.FieldValues["ID;PAYERSCODE;PAYERSNAMES;UNN;OKPO;LICENS;PHONE"] := VKDBFNTX1.FieldValues["ID;CODE;NAME;UNN;OKPO;LICENS;PHONE"];
   AdF1.Value := AsF1.Value;
   AdF2.Value := AsF2.Value;
   AdF3.Value := AsF3.Value;
   AdF4.Value := AsF4.Value;
   AdF5.Value := AsF5.Value;
   AdF6.Value := AsF6.Value;
   AdF7.Value := AsF7.Value;
   ADOTable1.Post;
   VKDBFNTX1.Next;
 end;
 ADOTable1.Close;
 VKDBFNTX1.Close;

Больше никаких действий нет(ни на DataSet, ни на форме).
При этом занимает это действо 15 секунд на той же машине.


 
Плохиш ©   (2006-01-05 11:48) [1]

Что мешает использовать DTS в своей программе?


 
sally   (2006-01-05 11:49) [2]

Хотя бы то, что не у каждого клиента установлен DTS


 
Плохиш ©   (2006-01-05 11:57) [3]

Тогда
1. Выкинуть ADOTable1
2. использовать транзакции
3. использовать "INSERT INTO ..." с параметрами

PS. Вполне возможно, что есть возможность вставить записи из DBF с помощью одного SQL-запроса. Читай документацию.


 
Anatoly Podgoretsky ©   (2006-01-05 12:19) [4]

DTS у клиентов не устанавливается


 
sally   (2006-01-05 13:04) [5]

Дело то не в DTS, а в том, как бы в своих программах ускорить изменение\добавление данных на больших объемах. Ведь как то Microsoft умеет это делать быстро. И вряд ли там(в DTS) используется просто SQL, т.к. можно написать обработку полей на VBS.


 
Anatoly Podgoretsky ©   (2006-01-05 13:05) [6]

sally   (05.01.06 13:04) [5]
Они не используют Table


 
sniknik ©   (2006-01-05 13:34) [7]

одной командой
INSERT INTO Table1 SELECT * FROM OpenRowset("Microsoft.Jet.OLEDB.4.0","dBase IV;DATABASE=D:\","select * from Table2")

путь (сдесь D:\) считается от сервера (mssql)
имена в запросе придется подобрать (т.е. вместо * -> ...PAYERSCODE AS CODE... чтобы не зависело от порядка полей)

кроме ADOTable (оно и скорость несовместимы. образно говоря), еще бы посоветовал не использовать ADOConnection1.Execute, вместо этого взять нормальный ADOCommand привязать его к конекту и юзать его (в этом случае неважно, но если понадобятся параметры... (для той же скорости выполнения), привыкай в общем нормально писать)



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.04 c
1-1138477891
Gnobobel
2006-01-28 22:51
2006.03.05
Клонирование TPanel с содержимым.


2-1140277888
Pit
2006-02-18 18:51
2006.03.05
Подменю в PopupMenu


9-1126089328
макс99
2005-09-07 14:35
2006.03.05
Вопрос по glRotate и glTranslate


1-1138610482
rolex
2006-01-30 11:41
2006.03.05
Как избавиться в ListView от мерцания при прокрутке?


4-1134239135
totuin
2005-12-10 21:25
2006.03.05
Програмное выключение монитора