Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
4-1096620777
thoth
2004-10-01 12:52
2004.11.07
что не так?


1-1098284549
Vikont
2004-10-20 19:02
2004.11.07
Импорт из Екселя в SQLтаблицу


14-1098293781
zokzok
2004-10-20 21:36
2004.11.07
как у компонента-потомка переписать событие?


8-1091859907
k-sergey
2004-08-07 10:25
2004.11.07
Загружаю в TImage Gif-картинку прога вылетает....


3-1097223065
Akoli
2004-10-08 12:11
2004.11.07
Надобы текстовый файл в МЕМО поле фугануть




   Наверх