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

Вниз

перенос данных на SQL-сервер осуществлялся быстрее.   Найти похожие ветки 

 
malax   (2002-08-30 11:18) [0]

Уважаемые мастера!

У меня осуществляется перенос информации из файлов *.dbf (лежат локально на моей машине) на SQL-сервер (локальная сеть 100 Мбит). Перенос 10000 записей(6 Мб) осуществляется за 10 минут. Общий размер переносимых данных 6 Мб.
dm2.qCustomers.ApplyUpdates выполняется 9 минут.

Машина у меня 700-Celeron, 128 Мб оперативки.


dm1.qPostav.DisableControls;
dm1.qPostav.First;

while not dm1.qPostav.Eof do
begin

dm2.qCustomers.Append;

dm2.qCustomers.FieldByName("Full_name").AsString:=dm1.qPostav.FieldByName("IMJP").AsString;

dm2.qCustomers.FieldByName("Older_id").AsString:=dm1.qPostav.FieldByName("KPOST").AsString;

dm2.qCustomers.FieldByName("Short_name").AsString:=dm1.qPostav.FieldByName("IMJS").AsString;
dm2.qCustomers.FieldByName("PIN").AsString:=dm1.qPostav.FieldByName("IND_NOMER").AsString;
dm2.qCustomers.FieldByName("Zip_code").AsString:=dm1.qPostav.FieldByName("PLAT_INDEX").AsString;
dm2.qCustomers.FieldByName("Place").AsString:=dm1.qPostav.FieldByName("PLAT_PUNKT").AsString;
dm2.qCustomers.FieldByName("Address").AsString:=dm1.qPostav.FieldByName("PLAT_ADR").AsString;
dm2.qCustomers.FieldByName("Phone").AsString:=dm1.qPostav.FieldByName("TELEFON").AsString;
dm2.qCustomers.FieldByName("Fax").AsString:=dm1.qPostav.FieldByName("TELEKS").AsString;

dm2.qCustomers.FieldByName("OKONH").AsString:=dm1.qPostav.FieldByName("OKONX").AsString;
dm2.qCustomers.FieldByName("OKPO").AsString:=dm1.qPostav.FieldByName("OKPO").AsString;

dm1.qPostav.Next;
end;

dm2.qCustomers.ApplyUpdates;
dm1.qPostav.EnableControls;

Подскажите как сделать так чтобы перенос данных на SQL-сервер осуществлялся быстрее.


 
Kuusiniemi ©   (2002-08-30 11:54) [1]

Воспользуйтесь средствами самого MS SQL - Data transformation Services.


 
malax   (2002-08-30 11:57) [2]

Мне нужно именно програмно


 
fool ©   (2002-08-30 12:25) [3]

Используй средства MSSQL,
Подробнее в хелпе о T-SQL
BULK INSERT [["database_name".]["owner"].]{"table_name" FROM data_file}
[WITH
(
[ BATCHSIZE [= batch_size]]
[[,] CHECK_CONSTRAINTS]
[[,] CODEPAGE [= "ACP" | "OEM" | "RAW" | "code_page"]]
[[,] DATAFILETYPE [=
{"char" | "native"| "widechar" | "widenative"}]]
[[,] FIELDTERMINATOR [= "field_terminator"]]
[[,] FIRSTROW [= first_row]]
[[,] FORMATFILE [= "format_file_path"]]
[[,] KEEPIDENTITY]
[[,] KEEPNULLS]
[[,] KILOBYTES_PER_BATCH [= kilobytes_per_batch]]
[[,] LASTROW [= last_row]]
[[,] MAXERRORS [= max_errors]]
[[,] ORDER ({column [ASC | DESC]} [,...n])]
[[,] ROWS_PER_BATCH [= rows_per_batch]]
[[,] ROWTERMINATOR [= "row_terminator"]]
[[,] TABLOCK]
)
]


 
sniknik ©   (2002-08-30 12:50) [4]

попробуй запрос в Query Analizer-е
select * from OpenRowset("MSDASQL.1", "Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\Work\Zip;", "select * from CashSail")
после select на select into поменяеш (с изменением синтаксиса ест-но) и дело в шляпе, как после в программу запрос засунуть надеюсь обьяснять не надо.
а BULK INSERT это немного из другой оперы им проше из текста качать.


 
malax   (2002-08-30 14:22) [5]

select * from OpenRowset("MSDASQL.1", "Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\Work\Zip;", "select * from CashSail")
На это в написало Query Analizer-е
Ad hoc access to OLE DB provider "MSDASQL.1" has been denied. You must access this provider through a linked server.


 
sniknik ©   (2002-08-31 14:58) [6]

Скорей всего у тебя не установлен провайдер или драйвер, что довольно странно он с офисом по умолчанию ставится. чтож попробуй еще.
(кстати следи чтобы строки "" не разрывались переносом он так может не "понять")
Прямой перевод говорит что доступ запрещен может таблица открыта с эксклюзивным доступом?но это я думаю сам проверил.

select * from OpenRowset("MSDASQL.1",
"Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\;",
"select * from GOODS")
или
select * from OpenRowset("MSDASQL",
"Driver={Microsoft dBase Driver (*.dbf)};DBQ=D:\;",
"select * from GOODS")
или если установлен Jet
SELECT * FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0",
"Data Source="D:\";Extended properties=dBase IV")...GOODS

первые два можно проверить, запусти "Источники данных (ODBC)" в настройках, в драйверах ищи "Microsoft dBase Driver (*.dbf)" найдеш значит должноработать. (можно любой из имеющихся использовать)
последнее проверяется так делай файл любой с расширением .udl, двойной клик на нем в проводнике открывает окно настроек вкладка провайдеры ищи строку ""Microsoft.Jet.OLEDB.4.0" найдеш значит ....


 
Desdechado ©   (2002-08-31 15:32) [7]

а если уж надо именно так, как ты в начале указал в коде, то поменяй FieldByName на Fields[ n ], a dm1.qPostav засунь в with( )
можно также делать AppendRecord - должно положительно сказаться на скорости.


 
Hro ©   (2002-08-31 21:05) [8]

Можно воспользоваться компонентом TBatchMove


 
ЮЮ ©   (2002-09-02 04:43) [9]

Для ускорения Цикла по вставке нужно:
1)Вместо Insert,Post cоздать параметрический запрос на вставку записи
2) Делать вставку внутри одной транзакции




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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
7-73899
dima leden
2002-07-13 21:05
2002.09.23
Параметр DWORD в системном реестре


1-73604
Max2000
2002-09-11 10:40
2002.09.23
Windows NT 4.0


1-73730
Explorer
2002-09-11 14:14
2002.09.23
В одном событие обработать другое


1-73689
kronprince
2002-09-10 20:52
2002.09.23
TListView при ViewStyle=vsReport


14-73827
Vint44
2002-08-27 13:28
2002.09.23
Ищу компоненту вроде эквалайзера