Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизУвеличение скорости обработки данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c