serj
1

Как выполнить запрос к источнику данных MS Excel

16.12.2007, 09:15. Показов 3696. Ответов 20
Метки нет (Все метки)

Известно, что с помощью компонента ADO можно обращаться к любым базам данных через ODBC. Но когда я попытался выполнить SQL запрос к данным находящимся в книге Excel, выдается ошибка. При выполнении запроса я в качестве имени таблицы использовал имя листа (SELECT * FROM Sheet1). Подскажите, что я делал неправильно.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2007, 09:15
Ответы с готовыми решениями:

Как выполнить SQL запрос к базе данных
Доброго времени суток. Первый раз в жизни разрабатываю приложение на WPF. Содержимое таблички...

Как выполнить AR Запрос в Yii на выборку записей по значению связанных данных?
Добрый день, Есть 2 таблицы: m_bids ------------ id mc_points ------------

Как отменить привязку DGV к источнику данных
OrdersDataGridView.DataSource = null ' "отвязать" grid от источника error BC30822: Нет объявления...

Как подключиться к источнику данных программно (без мастеров)
Как обойтись без перетаскивания? Среда Visual Basic STUDIO’2010 Professional В приложении...

20
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
16.12.2007, 13:32 2
Set oConnection = CreateObject('ADODB.Connection')
oConnection.Open 'Provider=Microsoft.Jet.OLEDB.4.0ata Source=excel.xls;Extended Properties=''Excel 8.0;HDR=NO'''
Set oRS = oConnection.Execute('SELECT F1 FROM [Sheet1$]')
0
Sergik
16.12.2007, 13:34 3
я всегда работаю с .xls через ADO с помощью 'именованных областей' (может это как-то по-другому называется), выделяется нужный диапазон ячеек в Excel, вставка-имя-присвоить, потом в SQL запросе идет 'select * from имя_диапазона'
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
16.12.2007, 13:50 4
Плохо подходит для INSERT
0
Sergik
16.12.2007, 13:56 5
я этим для select пользуюсь
serj
17.12.2007, 08:06 6
to t1k
В синтаксисе SQL запроса 'SELECT F1 FROM [Sheet1$]'
мне непонятно назначение скобок [] и знака $.
Если не в лом, растолкуй.
Заранее благодарен.
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
17.12.2007, 10:25 7
Sheet1 - имя листа Excel, $ - так надо. [] так возможно надо, а возможно и нет
0
0 / 0 / 0
Регистрация: 29.06.2007
Сообщений: 53
17.12.2007, 12:00 8
И квадратные скобки нужно и знак доллара тоже.
Приведенный пример как раз из MSDN Knowledge Base.
На самом деле, строка коннекта к базе может быть проще
connStr='Driver=Microsoft Excel Driver (*.xls)BQ='&Server.Mappath('/')&'file.xls'
этого достаточно.
0
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
17.12.2007, 12:06 9
Проще не значит лучше, насколько я знаю OLEDB строка соединения быстрее DSN
0
0 / 0 / 0
Регистрация: 29.06.2007
Сообщений: 53
17.12.2007, 12:29 10
Это примерно одно и тоже.
Просто если ты создаешь DSN, то в система за тебя сама создает такую же строку соединения где-то у себя.
0
Sergik
17.12.2007, 12:32 11
здесь речь идет не о DSN и не-DSN, а о драйвере, при помощи которого соединяешься с Excel: ODBC или OLEDB, OLEDB лучше
0 / 0 / 0
Регистрация: 29.06.2007
Сообщений: 53
17.12.2007, 12:51 12
Ты хочешь сказать, что подсоединение с помощью провайдера Microsoft.Jet.OLEDB.4.0 будет быстреет ?
Возможно, не проверял.
Но при таком соединении работают далеко не все методы и свойства полученного объекта recordset.
0
Sergik
17.12.2007, 12:59 13
точно не знаю насчет быстрее-нет, но слышал от знающих людей, что лучше
насчет поддерживаемости свойств и методов - я в 99% случаях использую только: .eof, movenext(), .execute() и получение значения поля
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
17.12.2007, 13:08 14
Тестирование OLEDB и DSN

http://www.4guysfromrolla.com/webtech/063099-1.shtml

Насчет плохой поддержки свойств и методов - первый раз слышу, по-моему скорее наоборот.
0
serj
17.12.2007, 13:39 15
Господа, я так и не получил ответа насчет присутствия в синтаксисе квадратных скобок и бакса. По стандарту SQL они вроде бы не нужны. Может быть они нужны для запроса именно к листу Excel, тогда каково их назначение. А по поводу подключения к источнику данных и использованию разных драйверов меня грузить не надо, я это все и сам знаю ;o)
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
17.12.2007, 13:48 16
Чем тебя не устраивает мой ответ от 09.10.2001 10:48?

А по поводу подключения к источнику данных и использованию
разных драйверов мы тебя не грузим, а обсуждаем между собой.
0
Sergik
17.12.2007, 14:26 17
насчет [], то если их не указывать, то драйвер будет думать, что Sheet1 - название именованного диапазона (см. мой ответ выше), насчет знака $, как мне кажется это разделитель между указанием листа и указанием ячейки(ячеек)
4 / 4 / 5
Регистрация: 10.05.2007
Сообщений: 1,616
17.12.2007, 14:34 18
[] нужны для того чтобы обработать $(и : в случае диапазона ячеек), тут та же аналогия что и пробел в имени таблицы, [Table Name], и именно $ дает отличие sheet от named range, никто ведь не мешает и имя named range заключить в [].
0
serj
24.12.2007, 06:51 19
Все понял, спасибо!
0 / 0 / 0
Регистрация: 24.12.2007
Сообщений: 12
24.12.2007, 17:40 20
В квадратные скобки заключаются имена таблиц или листов. В SQL имена таблиц не могут содержать пробелы и не латинских символов.
Для того чтобы обеспечить большую наглядность это ограничение было 'смягчено' вводом квадратных скобок.
Первы раз я столкнулся с этим когда работал с MS Access
Прочитать о использовании квадратных скобкак можно в книге Access97 от Microsoft Press.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2007, 17:40
Помогаю со студенческими работами здесь

Как программным путём привязать элемент управления типа Вложение к источнику данных?
Здравствуйте! Необходимо программным путём привязать элемент управления типа Вложение к...

Сохранение данных в программе без создания/подключения к внешнему источнику данных
Насколько я знаю сделать это можно. Хочу чтобы данные в определенных TextBox, СomboBox а так же в...

Не удаётся подключиться к базе данных и выполнить запрос
Доброго времени суток всем участникам форума. Надо подключиться к базе данных и достать из неё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru