![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к 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]
> считается таблицей в этой базе?
Лист книги Екселя.
А зачем такие извращения?