Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 имена столбцов через ace.oledb.12.0  [new]
gdengam
Member

Откуда:
Сообщений: 117
Доброго времени суток, вопрос такой:
У меня есть сервер на нем расшаренная папка и маленький интерфейс для клиентов, который собирает строку типа "SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;DATABASE=C:\test22.xlsx;IMEX=1;','select * from [Лист1$]')"
Эта строка выполняется на сервере, на клиенте нет возможности зарегистрировать провайдера.
Теперь сам вопрос
как мне по средствам T-SQL и того же ACE.OLEDB.12.0 получить список листов файла excel?
нет ли какой-то скрытой таблицы в excel, где хранятся имена листов?
25 июн 13, 17:28    [14481938]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
gdengam
как мне по средствам T-SQL и того же ACE.OLEDB.12.0 получить список листов файла excel?
Пожно получать данные по номеру листа, а не по имени
[sheet[1]$]
25 июн 13, 17:52    [14482064]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
gdengam
Member

Откуда:
Сообщений: 117
alexeyvg,

Не, к листу я и так могу доступ получить, мне надо именно список листов, чтобы пользователь мог выбрать нужный для импорта
26 июн 13, 09:13    [14483828]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
Glory
Member

Откуда:
Сообщений: 104751
gdengam
Не, к листу я и так могу доступ получить, мне надо именно список листов

Ну так в цикле обращаетесь ко всем возможным листам по номерам и отфильтровываете те, для которых возникла ошибка обращения

gdengam
нет ли какой-то скрытой таблицы в excel, где хранятся имена листов?

Есть. Только это не скрытая и не таблица. А коллекция. И обращаются с ней как с коллекцией. Т.е. методами OLE automation, а не SQL
26 июн 13, 10:19    [14484178]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
gdengam
Member

Откуда:
Сообщений: 117
Glory,

Все понял... значит мы пойдем другим путем)))) OLE, значит OLE

В процессе отладки появился еще вопросик:
в ОС один пользователь, под ним установленны все программы, в том числе и sql server и выполнен вход в виндоус...
На sql server создан пользователь с правами sysadmin
захожу в менеджмент студию под виндовым пользователем выполняю строку "SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;DATABASE=C:\test.xls;IMEX=1;','SELECT * FROM [Лист1$]')" - работает на ура
подключаюсь к той же студии под sql пользователем (в той же виндовой сессии, в том же окне management studio)? запускаю запрос и выдает ошибку 7399 с "provider didn't give any information about the error"
что сделать, чтобы под вторым пользователем запросы такого типа тоже работали?
прочел про права на временные папки, но не подходит - пользователь винды-то один... а на сервере и тот сисадмин и этот... не пойму в чем их разница по отношению к провайдеру
27 июн 13, 15:07    [14492242]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
gdengam
захожу в менеджмент студию под виндовым пользователем выполняю строку "SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;DATABASE=C:\test.xls;IMEX=1;','SELECT * FROM [Лист1$]')" - работает на ура
подключаюсь к той же студии под sql пользователем (в той же виндовой сессии, в том же окне management studio)? запускаю запрос и выдает ошибку 7399 с "provider didn't give any information about the error"
В первом случае проверяются права доступа виндового пользователя, во втором - пользователя, под которым запущен SQL Server
27 июн 13, 17:15    [14493322]     Ответить | Цитировать Сообщить модератору
 Re: имена столбцов через ace.oledb.12.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
gdengam
прочел про права на временные папки, но не подходит - пользователь винды-то один
sql пользователь не передаёт инфу о том, какой Win-пользователь запустил программу-клиентское приложения. Так что неважно, тот же пользователь, или другой - он всё равно не может использоваться для доступа.
27 июн 13, 17:17    [14493341]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить