Текущий архив: 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