импорт данных из Excel
От: Аноним  
Дата: 08.11.05 12:10
Оценка:
Здравствуйте!

Надо реализовать импорт большого количества(несколько тысяч строк) данных из Excel в MS SQL.
Я написал программу на Delphi, которая через com считывает данные из *.xls и вносит их в MS SQL. Но программа работает медленно. (реализована через позднее связывание).
А именно: медленно работает считывание данных из Excel.

Пока ячейки не пустые, считываем данные и генерируем sql запрос.
Как только попадаются несколько подряд пустых ячеек, цикл прерывается и sql запрос отправляется на сервер.

Вопрос заключается в следующем:
Возможно ли как-нибудь по-другому искать конец документа?
Или по-другому делать импорт данных?

P.S. В документе xls всего одна таблица.


try
IRange := fTableExcelInfo.ExcelBook[idBook].ISheet.UsedRange[0];
Values := IRange.Value;
finally
IRange := nil;
end;

//Формирование SQL запроса
if DM.QuerySQL.Fields.FieldByNumber(1).AsInteger=0 then //Если нет записей в таблице, то выполняем добавление строк
begin
while string(Values[i,j])<>'' do //считываем поля, пока не всретим пустую ячейку
begin
sql.Add('Insert into xlsTempTab'+IntToStr(idBook)+'(id,['+Field+']) values ('+IntToStr(id)+','''+string(Values[i,j])+''')' );
inc(i);//проходим по строкам
inc(id);
FormImport.StatusBar1.Panels[1].Text:='ячейка: '+IntToStr(id);
FormImport.StatusBar1.Repaint;
end;
end
else //В противном случае, выполняем обновление строк
begin
while (string(Values[i,j])<>'') do //считываем поля, пока не всретим пустую ячейку
begin
sql.Add('Update xlsTempTab'+IntToStr(idBook)+' Set '+ '['+Field+']='''+string(Values[i,j])+''' ');
sql.Add('where id=id');// последняя строка запроса
inc(i);//проходим по строкам
inc(id);
FormImport.StatusBar1.Panels[1].Text:='ячейка: '+IntToStr(id);
FormImport.StatusBar1.Repaint;
end;
Re: импорт данных из Excel
От: awod Россия  
Дата: 08.11.05 13:52
Оценка:
А почему бы не делать это через TDS?
А потом уже обрабатывать данные на стороне сервера?
С уважением AWOD.
Re: импорт данных из Excel
От: byur Россия http://yurybuluy.blogspot.com/
Дата: 08.11.05 13:53
Оценка:
Здравствуйте, Аноним, Вы писали:


А>P.S. В документе xls всего одна таблица.


Если структура таблицы xls линейная, или может быть сведена к ней, можно конвертануть ее в CSV, и запихивать из него ....
Re[2]: импорт данных из Excel
От: Аноним  
Дата: 08.11.05 16:31
Оценка:
Здравствуйте, awod, Вы писали:

A>А почему бы не делать это через TDS?

A>А потом уже обрабатывать данные на стороне сервера?

я хотел сделать через DTS, но при запросе:

SELECT *FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',
''Data Source="M:\temp.xls";User ID=Admin;Password=;
Extended properties=Excel 5.0'')...[Прил4$]

возникает ошибка :

Server: Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing a query for execution against OLE DB provider ''Microsoft.Jet.OLEDB.4.0''.
[OLE/DB provider returned message: Неизвестный]

и при импорте стандартными средствами SQL Server Enterprise Manager таблицу создает, но когда дело доходит до импорта данных, то пишет ту же выше приведенную ошибку

Эта ощибка является серьёзной преградой для использования DTS.
Причем мне кажется, что вся пробленя в конфигурациях сервера, или в конфигурациях windows, а не в синтаксисе запроса.

я уже пробывал на разны Excel файлах, и тип всех данных выставлял в строковый — не получается..
переустановка MS SQL сервера тоже не помогла..

может это что-то с системой? Запрос-то вроде правильный..
Re[2]: импорт данных из Excel
От: Аноним  
Дата: 08.11.05 16:38
Оценка:
Здравствуйте, byur, Вы писали:

B>Здравствуйте, Аноним, Вы писали:



А>>P.S. В документе xls всего одна таблица.


B>Если структура таблицы xls линейная, или может быть сведена к ней, можно конвертануть ее в CSV, и запихивать из него ....


А можно по-подробнее о CSV, или хотябы что это и где об этом можно прочитать?
Re[3]: импорт данных из Excel
От: awod Россия  
Дата: 08.11.05 16:57
Оценка:
Странно... У меня этот процесс всегда проходит без проблем.

Могу попробовать разобраться если вышлешь xls на е-майл awod собачка яндекс точка рю.
С уважением AWOD.
Re[3]: импорт данных из Excel
От: _spin_ Россия  
Дата: 08.11.05 17:01
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Эта ощибка является серьёзной преградой для использования DTS.

А>Причем мне кажется, что вся пробленя в конфигурациях сервера, или в конфигурациях windows, а не в синтаксисе запроса.
Сомневаюсь, что дело в настройках сервера и виндов.

А>я уже пробывал на разны Excel файлах, и тип всех данных выставлял в строковый — не получается..

А>переустановка MS SQL сервера тоже не помогла..

А>может это что-то с системой? Запрос-то вроде правильный..


Самый простой способ проверить — сделать экспорт из таблицы БД в файл Excel, а заием залить обратно. Если всё ок — проблема в запросе.

З.Ы. У меня схожие проблемы были (с Excel 2003) из-за корявого MDAC. Поставил 2.8 и всё заработало.
... <<#1 — 03 The Maxwell L'homme en peluche>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re[4]: импорт данных из Excel
От: awod Россия  
Дата: 08.11.05 17:04
Оценка:
По поводу MDAC здравая мысль
С уважением AWOD.
Re[4]: импорт данных из Excel
От: ArhArhangel  
Дата: 08.11.05 17:33
Оценка:
Здравствуйте, _spin_, Вы писали:

__>Здравствуйте, <Аноним>, Вы писали:


А>>Эта ощибка является серьёзной преградой для использования DTS.

А>>Причем мне кажется, что вся пробленя в конфигурациях сервера, или в конфигурациях windows, а не в синтаксисе запроса.
__>Сомневаюсь, что дело в настройках сервера и виндов.

А>>я уже пробывал на разны Excel файлах, и тип всех данных выставлял в строковый — не получается..

А>>переустановка MS SQL сервера тоже не помогла..

А>>может это что-то с системой? Запрос-то вроде правильный..


__>Самый простой способ проверить — сделать экспорт из таблицы БД в файл Excel, а заием залить обратно. Если всё ок — проблема в запросе.


__>З.Ы. У меня схожие проблемы были (с Excel 2003) из-за корявого MDAC. Поставил 2.8 и всё заработало.



я не очень понимаю в этом.
Не могли бы вы мне объяснить MDAC — это что? Microsoft Data Acces Component?
он относится к MS SQL, или к Excel?
Re[5]: импорт данных из Excel
От: _spin_ Россия  
Дата: 08.11.05 18:06
Оценка:
Здравствуйте, ArhArhangel, Вы писали:

AA>я не очень понимаю в этом.

AA>Не могли бы вы мне объяснить MDAC — это что? Microsoft Data Acces Component?
AA>он относится к MS SQL, или к Excel?

MDAC = Microsoft Data Acces Component.

Ставится и с офисом и с сиквелом. Только вот версии разные и иногда программа, установленная последней, заменяет некоторые файлы и настройки на более старые. Вроде ничего не меняется, но такая замена даёт неожиданные глюки.

Скачать можно с сайта MS. Версия 2.8 рус.
... <<Кипелов/Пушкина — Путь в некуда.mp3>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Re[3]: импорт данных из Excel
От: byur Россия http://yurybuluy.blogspot.com/
Дата: 09.11.05 12:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, byur, Вы писали:


B>>Здравствуйте, Аноним, Вы писали:



А>>>P.S. В документе xls всего одна таблица.


B>>Если структура таблицы xls линейная, или может быть сведена к ней, можно конвертануть ее в CSV, и запихивать из него ....


А>А можно по-подробнее о CSV, или хотябы что это и где об этом можно прочитать?


Comma separated ... просто в Excel говоришь Сохранить как ... и там выбираешь формат -- разделенный запятыми текст или табуляциями ... т.е. конвертишь это в текстовый файл средствами Excel -- а из текстового файла гораздо проще считать в базу ...
Особенно если данные сами по себе табличного типа ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.