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

Вниз

Доступ к xls-файлу через ADO   Найти похожие ветки 

 
Bless ©   (2004-10-06 10:27) [0]

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

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


 
Nikolay M. ©   (2004-10-06 10:45) [1]


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

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


 
Bless ©   (2004-10-06 10:55) [2]

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

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

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


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

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


 
Bless ©   (2004-10-06 11:22) [4]

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


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

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

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]


 
Bless ©   (2004-10-06 11:30) [6]

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

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


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

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


 
Nikolay M. ©   (2004-10-06 11:54) [8]


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

Имя ексельника задаешь во внешней переменной ДТС-пакета.
http://delphimaster.net/view/3-1096979681/


 
Bless ©   (2004-10-06 12:02) [9]

Polevi [5]>

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


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

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


 
Polevi ©   (2004-10-06 12:15) [11]

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


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


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

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


 
sniknik ©   (2004-10-06 16:53) [13]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
6-1093698179
TrogWar
2004-08-28 17:02
2004.11.07
Вот такая проблема с посылкой строки сокетом...


3-1097069082
Max Ivanych
2004-10-06 17:24
2004.11.07
Фильтр для таблицы Access


14-1098191680
ZEX
2004-10-19 17:14
2004.11.07
требуются программисты


14-1098350984
Викусик
2004-10-21 13:29
2004.11.07
Кстати, еще один вопрос...


14-1098273465
Ega23
2004-10-20 15:57
2004.11.07
Приятель только что приятель прислал :о)