Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Доступ к xls-файлу через ADO


Bless ©   (2004-10-06 10:27:00) 

Я сделал так:
результат запроса SELECT * FROM t1 в  Query Analizer сохранил как 1.csv. А затем в Excel-е сохранил как 1.xls.
Возможно прочитать данные из этого файла через ADO?

Я пробовал через Microsoft OLE DB Provider for ODBC.
В качестве базы указал 1.xls. Вроде приконнектилось. Кстати, если xls-файл - это база, то что считается таблицей в этой базе?
А как дальше?


sniknik   (2004-10-06 16:53:00) [1]

> Может, Лист1?
не именно Sheed1. ;о))
только с долларом на конце. (имя проще посмотреть в самом екселе, какое имя листа?)
запрос получится такой
SELECT * FROM [Sheed1$]


Nikolay M.   (2004-10-06 12:29:00) [2]


> 'Объект 'Sheet1' не найден

Может, Лист1?


Bless   (2004-10-06 12:15:00) [3]

Nikolay M. [8]>
Наверное, подойдет, спасибо. Думаю, вопрос снят (проверять сейчас некогда, но скорей всего заработает). Хотя почему не работают другие способы, интересно. Хоть и не актуально.


Polevi   (2004-10-06 12:15:00) [4]

>Bless ©   (06.10.04 12:02) [9]
а лист с таким именем есть в книге ?
попробуй в квадратные скобки взять
mdac также рекомендую поставить поновее


Bless   (2004-10-06 12:02:00) [5]

Polevi [5]>

Выскакивает та же ошибка:
Project Project1.exe raised exception class EOleException with message 'Объект 'Sheet1' не найден ядром базы данных Microsoft Jet.  Проверьте существование объекта и правильность имени и пути'.


Nikolay M.   (2004-10-06 11:54:00) [6]


> Попробовал. Получилось. Но желательно, чтобы такая возможность
> была в программе пользователя. Типа: меню-> импорт->выбрал
> xls-файл ->ок.

Имя ексельника задаешь во внешней переменной ДТС-пакета.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1096979681&n=1


Polevi   (2004-10-06 11:38:00) [7]

далее советую содержимое рекордсета сохранить в поток в xml виде, и затем этот xml пакет передать хранимой процедуре - далее смотри sp_xml_preparedocument и openxml


Bless   (2004-10-06 11:30:00) [8]

Polevi ©  (06.10.04 11:22) [5]>
>rs:=conn.Execute('SELECT * FROM Sheet1')

Опа. А я и не знал, что так можно. Попробую, спасибо.


Bless   (2004-10-06 11:22:00) [9]

Nikolay M.[3]>
Попробовал. Получилось. Но желательно, чтобы такая возможность была в программе пользователя. Типа: меню-> импорт->выбрал xls-файл ->ок.


Polevi   (2004-10-06 11:22:00) [10]

програмно так

var
 conn,rs:OleVariant;
begin
   conn:=CreateOleObject('ADODB.Connection');
   conn.Open(Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="Excel 8.0;HDR=NO"',[AFileName]));
   rs:=conn.Execute('SELECT * FROM Sheet1');
...

а вообще см [3]


Nikolay M.   (2004-10-06 11:04:00) [11]

Рекомендую потрогать Data Transformation Service. Задача сведется к приведению данных из ексельника к данным своей базы.


Bless   (2004-10-06 10:55:00) [12]

>Лист книги Екселя.
А как к нему обратиться?  select * from [лист1]. Дык, не пашет. И для ADOTable в свойстве tableName в выпадающем списке ничего нет.

>А зачем такие извращения?

Готовлюсь к ближайшему будущему :)
Из одной программы можно получить некий результат в виде экселевского файла. Эти данные надо занести в нашу MSSQL-базу.
Мне очень не хочется делать это через сервер автоматизации и чтение ячейки за ячейкой. Вот и ищу варианты.


Nikolay M.   (2004-10-06 10:45:00) [13]


> считается таблицей в этой базе?

Лист книги Екселя.
А зачем такие извращения?


Наверх

Титульная страница Поиск, карта сайта Написать письмо