Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Условие: есть куча однотипных Excel-файлов, есть MSSQL 2005 Express Edition, есть тулзы для MSSQL 2000. Установлен MS Office 2007.
Надо данные по очереди передать в таблицу на сервере и дальше ьам с ними что-то делать.
Возник затык в ConnectionString для OpenrowSet
Select A.* from OpenrowSet('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test\test.xls') as A

Ошибка: "Неправильный синтаксис около ")". "
Что-то не могу понять, какая строка соединения должна быть. Или для Excel нужно строго ещё и имя листа указывать?
7 май 09, 16:09    [7158809]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://www.sql.ru/forum/actualtopics.aspx?search=Excel+Openrowset&submit=%CD%E0%E9%F2%E8&bid=1
7 май 09, 16:11    [7158830]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Glory
Member

Откуда:
Сообщений: 104751
У OpenrowSet вообще то 3 параметра - провайдер, строка коннекта и запрос
А у вас один
7 май 09, 16:13    [7158842]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Glory
У OpenrowSet вообще то 3 параметра - провайдер, строка коннекта и запрос
А у вас один


Ага, я уже допёр, спасибо. Переделал, там что-то с security-настройками, сейчас разберусь.
7 май 09, 16:17    [7158881]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Гавриленко Сергей Алексеевич
https://www.sql.ru/forum/actualtopics.aspx?search=Excel+Openrowset&submit=%CD%E0%E9%F2%E8&bid=1


Да это первое, что посмотрел. :)
Видать что-то упустил.
7 май 09, 16:18    [7158891]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Так, очередной вопрос возник.
Есть Excel 2007. В нём создан тупой файл, в ячейки по вертикали забито q,w,e,r,t,y
Есть MSSQL Express Edition. Хочу увидеть выборку
Делаю так:
Select a.* from OpenrowSet(
	'Microsoft.ACE.OLEDB.12.0', 
	'Excel 12.0;Database=d:\test\1.xlsx', 
	'SELECT * FROM [Лист1$]'
	) as a

Выдаётся ошибка:
Msg 7399, Level 16, State 1, Line 1
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" сообщил об ошибке. Отказано в доступе.
Msg 7350, Level 16, State 2, Line 1
Не удалось получить сведения о столбце от поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".

Что сделано не так? Ошибка в строке соединения? Или в Лист1$ ?
7 май 09, 17:40    [7159449]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Файл не открыт часом?
7 май 09, 17:45    [7159472]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Le Peace
Файл не открыт часом?


Да вроде как нет...
7 май 09, 17:53    [7159507]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Пользователь, под которым запущена служба SQL Server, имеет права на папку?
7 май 09, 17:57    [7159523]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
ветерочек
Guest

 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\4.xls;Extended Properties=EXCEL 5.0')...[Лист1$];

7 май 09, 17:57    [7159524]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
ветерочек, тут 2007 Excel.
7 май 09, 18:03    [7159553]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Le Peace
Пользователь, под которым запущена служба SQL Server, имеет права на папку?


Да, я локальный админ. Служба, вроде как, тоже должна запускаться...
Короче. Вот такой ConnectionString я сформировал в Delphi (и нормально подцепился)

Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DBQ=D:\Test\3.xlsx;DefaultDir=D:\Test;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=excel 12.0;FILEDSN=D:\Test\3.xlsx.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"

Делал, правда, абсолютно без ума, по-обезьяньи в кнопки тыкал. Однако - в грид получил.
7 май 09, 18:09    [7159579]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Ega

Да, я локальный админ. Служба, вроде как, тоже должна запускаться...

Вы-то, может, и админ, а служба всё-таки под кем запущена?
7 май 09, 19:42    [7159824]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Так, ситуация всё любопытнее.
Создаю новый Excel-файл.
В ячейку A1 пишу 'q', в А2 - 'e' и так далее - qwerty
Переименовываю "Лист1" в "S1"
Сохраняю, закрываю.
В Management Studio пишу следующий запрос:
SELECT * FROM
OPENROWSET
	('Microsoft.ACE.OLEDB.12.0',
	 'Excel 12.0;Database=d:\test\3.xlsx',
     'SELECT * FROM [S1$]'
)

Вижу вот такой результат:

q
-------------------------------------------------------------------------------
Msg 7399, Level 16, State 1, Line 1
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" сообщил об ошибке. Отказано в доступе.
Msg 7350, Level 16, State 2, Line 1
Не удалось получить сведения о столбце от поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".


Как я понял, название колонки ('q') он определил. А вот всё, что дальше - нет.
Может мне в Excel какое-то форматирование данных надо использовать?
Просто плотно с Excel последний раз где-то лет 9 назад работал, ещё когда учился.
7 май 09, 19:43    [7159825]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Ega,

а если
SELECT * FROM [S1$]
заменить на
[S1$]
?

И внешний
select * 
убрать, сделать для начала
select 1
7 май 09, 20:05    [7159873]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Le Peace
Ega,
а если
SELECT * FROM [S1$]
заменить на
[S1$]
?


Во, а здесь другая ошибка:
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" вернул сообщение "Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'.".
Msg 7321, Level 16, State 2, Line 1
Ошибка при подготовке запроса "[S1$]" к выполнению при помощи поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".

Ну, в целом-то понятно - команды нет.

Le Peace
И внешний
select * 
убрать, сделать для начала
select 1


Та же ошибка, что и раньше, только теперь вообще без названия столбца (но это для select 1 понятно)
7 май 09, 20:12    [7159889]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Вобщем, "меня терзают смутные сомнения" (с).
Очень похоже на то, что этой сволочи нужно как-то явным образом тип получаемых данных указывать. Ну, типа, как в Postgres для произвольных массивов.
Либо на эту колонку в самом Excel нужно какой-то модификатор наложить, что, мол данные такого-то типа.
Либо что-то в настройках Microsoft.ACE.OLEDB.12.0 ковырять.

Кто-нить может что сказать по этому поводу?
7 май 09, 20:15    [7159899]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
ветерочек
Guest
Le Peace
ветерочек, тут 2007 Excel.


у меня и так работает :))
(и офис только 2007. )
 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\4.xlsm;Extended Properties=EXCEL 5.0')...[Лист1$] ;
8 май 09, 08:11    [7160563]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
ветерочек
Le Peace
ветерочек, тут 2007 Excel.


у меня и так работает :))
(и офис только 2007. )
 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\4.xlsm;Extended Properties=EXCEL 5.0')...[Лист1$] ;


Msg 7399, Level 16, State 1, Line 1
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)" сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Msg 7303, Level 16, State 1, Line 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)".
8 май 09, 10:17    [7160977]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
ветерочек
Guest
Ega
ветерочек
Le Peace
ветерочек, тут 2007 Excel.


у меня и так работает :))
(и офис только 2007. )
 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\4.xlsm;Extended Properties=EXCEL 5.0')...[Лист1$] ;


Msg 7399, Level 16, State 1, Line 1
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)" сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Msg 7303, Level 16, State 1, Line 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)".

выкладывай файл
8 май 09, 10:22    [7161007]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
Для Excel 2007, 8 Кб

К сообщению приложен файл (3.xlsx - 8Kb) cкачать
8 май 09, 10:53    [7161229]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
ветерочек
Guest
Ega
Для Excel 2007, 8 Кб


вот так у меня сработало ..
select*
 FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\3.xlsx;Extended Properties=EXCEL 5.0')...[S1$] ;

8 май 09, 11:03    [7161289]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Ega
Member

Откуда: Дубна
Сообщений: 4531
ветерочек

вот так у меня сработало ..


select*
 FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\Test\3.xlsx;Extended Properties=EXCEL 5.0')...[S1$] ;

q
----------------------------------------------------------------------
Msg 7399, Level 16, State 1, Line 1
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" сообщил об ошибке. Отказано в доступе.
Msg 7301, Level 16, State 2, Line 1
Не удалось получить обязательный интерфейс ("IID_IDBCreateCommand") от поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".


вообще ничего не понимаю.
8 май 09, 11:22    [7161384]     Ответить | Цитировать Сообщить модератору
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
А если добавить IMEX=1?
8 май 09, 11:53    [7161554]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: ConnectionString для OpenRowSet, импорт данных из Excel  [new]
generalmaximus
Member

Откуда: Хабаровск
Сообщений: 66
Ребята, подскажите как все же правильно решать эту проблему?
11 июн 11, 13:16    [10801469]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить