Надо реализовать импорт большого количества(несколько тысяч строк) данных из Excel в MS SQL.
Я написал программу на Delphi, которая через com считывает данные из *.xls и вносит их в MS SQL. Но программа работает медленно. (реализована через позднее связывание).
А именно: медленно работает считывание данных из Excel.
Пока ячейки не пустые, считываем данные и генерируем sql запрос.
Как только попадаются несколько подряд пустых ячеек, цикл прерывается и sql запрос отправляется на сервер.
Вопрос заключается в следующем:
Возможно ли как-нибудь по-другому искать конец документа?
Или по-другому делать импорт данных?
//Формирование 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;
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, или хотябы что это и где об этом можно прочитать?
Здравствуйте, <Аноним>, Вы писали:
А>Эта ощибка является серьёзной преградой для использования DTS. А>Причем мне кажется, что вся пробленя в конфигурациях сервера, или в конфигурациях windows, а не в синтаксисе запроса.
Сомневаюсь, что дело в настройках сервера и виндов.
А>я уже пробывал на разны Excel файлах, и тип всех данных выставлял в строковый — не получается.. А>переустановка MS SQL сервера тоже не помогла..
А>может это что-то с системой? Запрос-то вроде правильный..
Самый простой способ проверить — сделать экспорт из таблицы БД в файл Excel, а заием залить обратно. Если всё ок — проблема в запросе.
З.Ы. У меня схожие проблемы были (с Excel 2003) из-за корявого MDAC. Поставил 2.8 и всё заработало.
... <<#1 — 03 The Maxwell L'homme en peluche>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Здравствуйте, _spin_, Вы писали:
__>Здравствуйте, <Аноним>, Вы писали:
А>>Эта ощибка является серьёзной преградой для использования DTS. А>>Причем мне кажется, что вся пробленя в конфигурациях сервера, или в конфигурациях windows, а не в синтаксисе запроса. __>Сомневаюсь, что дело в настройках сервера и виндов.
А>>я уже пробывал на разны Excel файлах, и тип всех данных выставлял в строковый — не получается.. А>>переустановка MS SQL сервера тоже не помогла..
А>>может это что-то с системой? Запрос-то вроде правильный..
__>Самый простой способ проверить — сделать экспорт из таблицы БД в файл Excel, а заием залить обратно. Если всё ок — проблема в запросе.
__>З.Ы. У меня схожие проблемы были (с Excel 2003) из-за корявого MDAC. Поставил 2.8 и всё заработало.
я не очень понимаю в этом.
Не могли бы вы мне объяснить MDAC — это что? Microsoft Data Acces Component?
он относится к MS SQL, или к Excel?
Здравствуйте, ArhArhangel, Вы писали:
AA>я не очень понимаю в этом. AA>Не могли бы вы мне объяснить MDAC — это что? Microsoft Data Acces Component? AA>он относится к MS SQL, или к Excel?
MDAC = Microsoft Data Acces Component.
Ставится и с офисом и с сиквелом. Только вот версии разные и иногда программа, установленная последней, заменяет некоторые файлы и настройки на более старые. Вроде ничего не меняется, но такая замена даёт неожиданные глюки.
Скачать можно с сайта MS. Версия 2.8 рус.
... <<Кипелов/Пушкина — Путь в некуда.mp3>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, byur, Вы писали:
B>>Здравствуйте, Аноним, Вы писали:
А>>>P.S. В документе xls всего одна таблица.
B>>Если структура таблицы xls линейная, или может быть сведена к ней, можно конвертануть ее в CSV, и запихивать из него ....
А>А можно по-подробнее о CSV, или хотябы что это и где об этом можно прочитать?
Comma separated ... просто в Excel говоришь Сохранить как ... и там выбираешь формат -- разделенный запятыми текст или табуляциями ... т.е. конвертишь это в текстовый файл средствами Excel -- а из текстового файла гораздо проще считать в базу ...
Особенно если данные сами по себе табличного типа ...