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

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

Подключение к Екселю как к БД через ADO


Alexander_K ©   (2007-01-11 14:40:00) 

Добрый день!

Пробую подключиться к экселевскому файлу как к бд...
Но вот ничего не получается...

Использую ADO, кидаю на форму компонент ADOConnection, создаю строку подключения:
Выбираю провайдера Microsoft OLE DB Provider for ODBC Drivers
Создаю DSN файл:
Выбираю драйвер Driver do Microsoft Excel(*.xls)
В окне выбора файла источника данных указываю мой файл экселевский C:\test\qqq.xls
В выборе книги так же выбираю мой файл...
После чего создается файл DSN, который я и выбираю далее...

Содержание DSN файла:

[ODBC]
DRIVER=Driver do Microsoft Excel(*.xls)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
ReadOnly=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=excel 8.0
DriverId=790
DefaultDir=C:\test
DBQ=C:\test\qqq.xls

Нажимаю проверка подключения, выдается: проверка подключения выполнена...

Потом ставлю свойство Connected у ADOConnection в true, все успешно...

Строка подключения получается следующая:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=C:\test\qqq.xls;DefaultDir=C:\test;Driver={Driver do Microsoft Excel(*.xls)};DriverId=790;FIL=excel 8.0;FILEDSN=C:\test\qqq.xls.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;R eadOnly=0;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"

После чего кидаю на форму ADOQuery, соединяю его с ADOConnection в поле SQL ввожу простейший запрос:

select * from qqq

Делаю Active выдает ошибку:
Объект qqq не найден ядром базы данных Microsoft Jet, проверьте существование объекта и правильность имени и пути.

то же самое выводится и если пишу запрос:
select * from qqq.xls

Народ, подскажите, что я делаю не так?


YurikGL   (2007-01-13 12:56:00) [1]

http://kladovka.net.ru/index.cgi?pid=board&rid=363
Здесь реализовано подключение к Excel через ADO и выполнение запросов (insert точно помню что был :) )


sniknik   (2007-01-11 16:14:00) [2]

> говорит: Синтаксическая ошибка в запросе. Неполное предложение запроса.
;о)) логично, у jet " в конце строки это комментарий (как в VB), те. получается ты передаешь не
select * from "first$"
а
select * from


Alexander_K   (2007-01-11 16:12:00) [3]

Оооо, с квадратными скобками все заработало!!!

Всем большое спасибо!


sniknik   (2007-01-11 16:11:00) [4]

кавычки "" "отсебятина" odbc, при передаче он немного корректирует запросы (видно по некоторым ошибкам, не вспомню прям счас каким, с датами вроде есть), попробуй "" заменить на [] это чисто "jet-овское".


Anatoly Podgoretsky   (2007-01-11 16:11:00) [5]

> Alexander_K  (11.01.2007 16:06:06)  [6]

Проверь с квадратными скобками.


Alexander_K   (2007-01-11 16:06:00) [6]

Пробую так, Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\qqq.xls;Extended Properties=Excel 8.0
вроде цепляется... но на запрос
select * from "first$"

говорит: Синтаксическая ошибка в запросе. Неполное предложение запроса.

делаю даже через конструктор для CommandText в ADODataSet
получается запрос:
select * from first$

тоже выдает ошибку: ошибка синтаксиса в предложении FROM


sniknik   (2007-01-11 15:49:00) [7]

> но если там выбрать екселевский файл,
то надо указать используемый тип (ISAM)
простейшая строка подключения (замена/аналог(для другого провайдера) твоей)
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\qqq.xls;Extended Properties=Excel 8.0


alex_***   (2007-01-11 15:34:00) [8]

можно через именованный диапазон: select * from MyRange
conn_str:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Файлы Excel;DBQ=C:\work\test_small.xls;DefaultDir=C:\work;DriverId=790;MaxBufferSize=2 048;PageTimeout=5;"


Alexander_K   (2007-01-11 15:25:00) [9]

Попробовал select * from "first$"
все вроде бы получилось, спасибо большое!!!

А вот:

> делай лучше прямой коннект, без посредников...

не совсем понял. Ты предлагаешь выбирать поставщика Microsoft Jet 4.0 OLE DB Provider?
но если там выбрать екселевский файл, при проверке подключения выдается ошибка:

Не выполнена проверка подключения из-за ошибки при инициализации поставщика. Нераспознаваемый формат базы данных: C:\test\qqq.xls

Может я просто че-нибудь не понял?


sniknik   (2007-01-11 15:04:00) [10]

select * from ИмяТаблицы!АНеБазы $
без бакса в конце искать не будет.

кстати, никаких ассоциаций в ошибке не усматриваешь? конкретно
> Объект qqq не найден ядром базы данных Microsoft Jet
хотя подключение к ODBC... (драйвер которого вызывает в свою очередь его), делай лучше прямой коннект, без посредников...


Виталий Панасенко   (2007-01-11 14:58:00) [11]

Выборка делается из ЛИСТА(Sheet) Select * from [Sheet1]


Наверх

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