Top-office11.ru

IT и мир ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Odbc строка подключения excel

9.4 Подключение к таблице на листе Excel

Подключение к таблице Excel средствами ADO, создание именованного диапазона, создание источника данных ODBC

Очень часто в практической работе возникает необходимость подключиться к таблице на листе Excel, как к базе данных. Конечно, можно работать и средствами объектной модели Excel (см. раздел 11 «Программирование в Excel»), но использование объектов ADO дает значительные преимущества:

  • намного проще и удобнее производить поиск записи, вставку новых записей в таблицу, изменение существующих записей. Объекты ADO изначально проектировались именно для этих целей;
  • объектную модель Excel можно использовать только в Excel, а объекты ADO универсальны и могут использоваться для подключения к любым источникам данных. Если вы используете объекты ADO, то вы можете использовать фактически одно и то же приложение как для работы с данными в Excel, так и для работы с информацией в «большой» базе данных — например, SQL Server или Oracle. Ситуация, когда часть информации находится в базе данных, а другая часть — в книге Excel, встречается на практике очень часто.

Подключиться к таблице на листе Excel совсем не сложно, но самостоятельно догадаться до всей последовательности действий бывает трудно. Поэтому ниже приведена пошаговая последовательность действий.

Предположим, что у нас есть книга Excel, которая называется Fact.xls и лежит в корневом каталоге диска C:. На первом листе этой книге есть такая совсем несложная таблица, представленная на рис. 9.7

Рис. 9.7 Таблица в Excel, к которой нужно обратиться средствами ADO

Нам необходимо подключиться к этой таблице, как к базе данных. Что нам нужно сделать?

Первый этап — это подготовка. Иногда можно обойтись и без нее (если лист Excel — это одна таблица). На практике же часто бывает так, что на листе у нас несколько таблиц, или таблица с комментариями, или внизу таблицы посчитаны итоги и т.п. Чтобы не смущать Excel, лучше явно указать нашу таблицу. Сделать это очень просто: нужно ее выделить (в нашем случае — выделить диапазон с B3 по D8) и присвоить выделенному диапазону имя. Для этого в Excel в меню Вставка нужно выбрать Имя -> Присвоить и ввести нужное имя. В нашем случае мы присвоим имя Volumes (см. рис. 9.8)

Рис. 9.8 Присваиваем имя диапазону

Обратите внимание, что нужно выбирать диапазон вместе с названиями столбцов.

После того, как имя присвоено, Excel можно закрывать — он больше нам не нужен.

Дальше по плану нужно было бы создать файл *.UDL и настроить в нем подключение к нашему файлу C:Fact.xls. Однако напрямую из файла UDL можно работать только с драйверами OLE DB, а нужного драйвера, к сожалению, нет (Microsoft JET 4.0 OLE DB Provider хочет работать только с файлами MDB). Поэтому делаем еще один подготовительный шаг — создаем источник данных ODBC (поскольку драйвер ODBC для подключения к Excel есть). Первое действие — в Панели управления открываем Administrative Tools (Средства администрирования) и два раза щелкаем по иконке Data Sources (ODBC) (Источники данных ODBC). Откроется окно, аналогичное представленному на рис. 9.9.

Рис. 9.9 Окно управления источниками данных ODBC

В вашем распоряжении — три типа DSN (Data Source Name, то есть источников данных ODBC):

  • UserDSN — информация об этих источниках данных хранится в части реестра, специфической для пользователя, поэтому эти источники данных доступны только тому пользователю, который их создал;
  • SystemDSN — информация об этих источниках данных хранится в общей части реестра и доступна для всех пользователей на этом компьютере;
  • FileDSN — информация об этих источниках данных записывается в файл в файловой системе.

Чаще всего используются System DSN — системные источники данных, поэтому переходим на вкладку System DSN и нажимаем на кнопку Add (Создать).

Читать еще:  Код символа переноса строки в word

Первое, о чем нас спросят — это о типе драйвера, который мы хотим использовать. Выбираем, конечно, Microsoft Excel Driver и нажимаем на кнопку Finish. Но создание источника данных на этом далеко не кончилось.

На следующем экране нам потребуется:

  • в поле Data Source Name ввести имя источника данных. Можно ввести любое имя — главное, чтобы вы его не забыли. Мы введем имя ExcelVolumes;
  • нажать на кнопку SelectWorkbook и выбрать нужную нам рабочую книгу (в нашем случае — C:Fact.xls);
  • нажать на кнопку Options и подумать, будем ли изменять из программы нашу таблицу. Если да, то флажок Read Only нужно снять.

В итоге окно может выглядеть так, как представлено на рис. 9.10.

Рис. 9.10 Настраиваем источник ODBC для подключения к файлу Excel

Осталось нажать два раза на кнопку OK, чтобы закрыть окно создания источника данных ODBC.

В принципе, в коде программы можно написать значение свойства ConnectionString вручную, воспользовавшись документацией по ADO. Выглядеть соответствующая строка, к примеру, может так:

Но зачем что-то писать руками, когда можно сгенерировать нужное значение автоматически? А сгенерировать можно очень просто:

  • так, как описано в предыдущем разделе, создаем файл UDL (можно воспользоваться уже готовым);
  • щелкаем по нему два раза мышью, переходим на вкладку Provider и выбираем Microsoft OLE DB Provider for ODBC Drivers;
  • переходим на вкладку Connection и в списке Use Data Source Name выбираем созданный нами источник данных ExcelVolumes. Остальные поля можно не заполнять (см. рис. 9.11). Для проверки можно нажать на кнопку Test Connection, а затем — OK.

Рис. 9.11 Настраиваем параметры подключения к созданному источнику ODBC

  • последнее действие — открываем созданный нами файл UDL в блокноте, копируем из него строку подключения и используем в нашей программе.

Итоговый код процедуры для подключения к Excel может выглядеть так:

Public Sub ConnectToExcel()

Dim cn As New ADODB.Connection

‘Про Recordset мы будем говорить в следующем разделе

‘Этот код помещен для наглядной проверки

Dim rs As New ADODB.Recordset

Чтобы подключиться к файлу Excel, нам потребовалось:

  • Создать именованный диапазон в книге Excel;
  • Создать источник данных ODBC с именем ExcelVolumes;
  • Написать три строки кода начиная с создания объекта Connection до вызова его метода Open.

«MS Excel » через «ODBC»

Постановка задачи: необходимо создать подключение к файлам « MS Excel » через « ODBC ».

Для создания нового подключения в « Windows XP » нужно перейти в раздел «ПУСК – Панель управления – Администрирование – Источники данных ( ODBC )». Далее, на закладке « Пользовательский DSN » нажать кнопку «Добавить…».

Рис. 1. АИД ODBC , закладка «Пользовательский DSN »

Затем надо выбрать драйвер « Driver do Microsoft Excel (*. xls ) » .

Рис. 2. Выбор нужного драйвера

Далее нужно ввести имя и описание для нового подключения.

Рис. 3. Ввод имени и описания

После этого всего новое подключение появится в списке источников данных на закладке «Пользовательский DSN » окна «АИД ODBC ».

Рис. 4. Окно АИД ODBC , после добавления нового подключения

Проверить работу только что созданного подключения можно в среде разработки « Delphi 7». Для этого в новом приложении нужно перетащить на форму компоненты: ADOConnection , ADOTable , DataSource , DBGrid .

Самое важное в этом деле это настроить строку подключения в компоненте « ADOConnection 1». Кликаем по нему 2 раза и запускается мастер создания строки подключения.

На закладке «Поставщик данных» выбираем « Microsoft OLE DB Provider for ODBC Driver ».

Рис. 5. Закладка «Поставщик данных»

Затем на закладке «Подключение» выбираем вариант «Использовать строку подключения» и начинаем использовать ее по полной. Т.к. в нашем подключении не указана конкретная БД, точнее файл. Нажимаем кнопку «Сборка…».

Читать еще:  Специальные символы в word

Рис. 6. Закладка «Подключение»

Потом выбираем источник на закладке «Источник данных компьютера» и жмем кнопку « Ок ».

Рис. 7. Закладка «Источник данных компьютера»

Появится диалог выбора конкретного файла на диске. Ищем нужный файл и выбираем.

Рис. 8. Диалог выбора файла

После этого можно проверить подключение, нажав на кнопку «Проверить подключение», но наверняка все в порядке.

Далее донастраиваем настройки компонентов. Параметр « ConnectionString » компонента « ADOConnection 1» можно переделать, а можно и так оставить. Дело в том, что этот параметр заполнился так, что свойство « DeafaultDatabase » по сути пустует, хотя все нормально работает и к файлу «Магазины. xls » доступ есть.

ConnectionString = «Prov > Extended Properties=»DSN= Файлы MS Excel; DBQ= C:EXCEL Магазины . xls;DefaultDir =C:EXCEL ;Driver > FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;»»

Строка подключения ODBC c параметрами

Доброго времени суток.

Делаю GUI на MS Access 2007 к базе данных MS SQL и необходима динамическая авторизация пользователей.

Т.Е. есть форма в которую пользователь вводит логинпароль, нужно их использовать в строке подключения ODBC,
причем очень хотелось бы просто конструктором сделать запрос к серверу и в строку подключения вписать введенные логин и пароль, однако:

Вот это Access кушает с удовольствием:

Visual Basic

Пишет не правильная строка подключения ODBC

Вопрос — можно ли вообще в этой строке использовать выражения, или придется делать все на VBA?

Visual Basic
01.02.2013, 17:30

Строка подключения ODBC
Создан ODBC источник для базы. Сама база имеет пароль. Как должна выглядеть строка подключения? .

ODBC ошибка подключения
Уважаемые знатоки, прошу помощи настроил экспорт данных с сервера MYSQL в базу данных acces, на.

Программная настройка подключения через ODBC
Здравствуйте! Имеется форма, которая получает данные из связанных таблиц посредством ODBC. Когда.

Запрс с параметрами MySQL через ODBC 5,1
Подскажите чё не так? Запрос в C# ReadCommand.CommandText = «SELECT.

01.02.2013, 18:202
02.02.2013, 13:00 [ТС]3

Возможно я не правильно выразился, но у меня есть полностью рабочая строка подключения.

Вопрос в том как заставить Access подставлять в нее значения из TempVars.

Пока пришлось сделать на VBA вот так:

НО при выходе логин и пароль остаются в строке в открытом виде.

Можно конечно очищать ее перед закрытием или запуском Access, но было бы проще и лучше если бы там оставались только ссылки на TempVars.

Добавлено через 6 минут
PS. Имеется ввиду именно свойство «Строка подключения ODBC» в конструкторе запросов Access 2007 — можно ли там использовать выражения Access и если да, то какой синтаксис

Visual Basic
02.02.2013, 15:204

Intervent,
я бы хранил («запоминал») такого рода данные в отдельной таблице, но уж никак не в переменных

Добавлено через 48 минут

Visual Basic
05.02.2013, 15:11 [ТС]5

Благодарю за ответ!

Глобальные переменные я решил использовать с той целью, чтоб в случае разрыва сессии по любой причине в Access не оставались пароль и логин в открытом виде. На сколько я понимаю эти переменные хранятся в ОЗУ, поэтому даже если кто-то получит доступ к файлу Access(в том числе во время активной сессии, через сеть напимер), логин и пароль ему все равно не достанется. Или я не прав.

Вообще суть в следующем (все на Access 2007):

Пользователь запускает файл Access , открывается форма Авторизации. Вводит логин/пароль (именно они и хранятся на время сессии в TempVars) и эти данные используются в «строке подключения ODBC». Вся безопасность обеспечивается серверами SQL, причем подключаться будут базы с разных серверов и разными драйверами (MS SQL и MySQL) но с одной и той же парой логинпароль. Это позволило бы сэкономить кучу времени. Можно было бы просто конструкторами создать запросы и формы, тем более количество вводимых данных небольшое. Вдобавок избежать проблем с драйверами ODBC и созданием пользовательских DSN’ов на клиентах.

Так пока и не нашел простой реализации без ADO/DAO и динамической генерации строки подключения.

Odbc строка подключения excel

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

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

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

[ODBC]
DRIVER=Driver do Microsoft Excel(*.xls)
U >UserCommitSync=Yes
Threads=3
SafeTransactions=0
ReadOnly=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=excel 8.0
Driver >DefaultDir=C:test
DBQ=C:testqqq.xls

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

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

Строка подключения получается следующая:
Prov

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

select * from qqq

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

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

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


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

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


sniknik © ( 2007-01-11 15:04 ) [2]

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

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


Alexander_K © ( 2007-01-11 15:25 ) [3]

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

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

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

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

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


alex_*** © ( 2007-01-11 15:34 ) [4]

можно через именованный диапазон: select * from MyRange
conn_str:
Prov


sniknik © ( 2007-01-11 15:49 ) [5]

> но если там выбрать екселевский файл,
то надо указать используемый тип (ISAM)
простейшая строка подключения (замена/аналог(для другого провайдера) твоей)
Prov >


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

Пробую так, Prov >вроде цепляется. но на запрос
select * from «first$»

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

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

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


sniknik © ( 2007-01-11 16:11 ) [7]

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


Anatoly Podgoretsky © ( 2007-01-11 16:11 ) [8]

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

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


Alexander_K © ( 2007-01-11 16:12 ) [9]

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

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


sniknik © ( 2007-01-11 16:14 ) [10]

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


YurikGL © ( 2007-01-13 12:56 ) [11]

Ссылка на основную публикацию
Adblock
detector