С базой данных Access, которую можно найти в офисном пакете Microsoft Office, последний раз я имел возможность общаться еще в те далекие годы, когда учился на первом курсе университета. Нужно заметить, что после знакомства и поверхностного изучения этой БД, впечатления остались не из приятных. Уже тогда у меня был богатый опыт работы с MySQL и некоторые навыки работы с Oracle. На их фоне Access казался немощным, отсталым в развитии и просто неудобным. А неотъемлемый графический интерфейс и активно навязываемые билдеры и «мастера» просто сводили меня с ума.
Как бы там ни было, но с этой БД я встретился вновь, уже в рамках коммерческого заказа, задачей которого ставилась необходимость перенести часть данных из MySQL базы данных.
Казалось бы, чего тут сложного? На локальной машине можно не думать о производительности и нагрузках. Несколько десятков тысяч запросов в теле цикла никого не расстроят. Синтаксис SQL отличаться не должен, так как запросы предполагаются крайне простые. Но вот с планированием и реализацией структуры таблиц в Access оказалось не все так очевидно и легко. Типизация данных у Access достаточно своеобразная. Об этом и еще некоторых нюансах и пойдет речь дальше.
Microsoft Access. Создание базы данных и настройка подключения
Прежде чем приступить к настройке подключения к базе данных, необходимо установить Microsoft Access, конечно, если вы этого еще не сделали. Access входит в офисный пакет и ставится аналогично любому другому компоненту этого пакета. Полагаю, с этим вы справитесь!
Впервые я настраивал подключение под ОС Windows XP, но в данном случае описываю тот же процесс под Windows Seven. Если мне не изменяет память и я ничего не путаю, то никакой разницы я не заметил. Это я к тому, что если ваша ОС отличается, ничего страшного. Проблем возникнуть не должно.
И так, в порядке очередности проделываем следующее:
- Создаем DSN (Data Source Name). Для этого отправляемся в Панель управления > Администрирование > Источники данных (ODBC)
(Control Panel > Administrative Tools > Data Sources (ODBC)) - Активируем вкладку Системный DSN (System DSN)
У вас список источников данных (User Data Sources) должен быть пустым, а у меня, как видно на скришноте, там уже есть один источник данных. Это профиль Access, который я использовал в работе. Мы создадим новый. - Смело жмем кнопку Добавить (Add) и видим достаточно большой список имеющих драйверов (а может быть и маленький).
Через ODBC драйвер можно работать не только с Access, но и с еще добрым десятком баз данных, среди которых MySQL и PostgreSQL. Но это не наш случай, и мы выбираем драйвер Driver do Microsoft Access (*.mdb).
- В открывшемся диалоговом окне необходимо задать желаемое имя источника данных. Также можете задать описание, если в этом есть необходимость.
В блоке База данных (Database) жмем кнопку Создать и в открывшемся окне указываем путь до директории, где будет создана база данных – файл с расширением mdb. Если все правильно, то появится всплывающее окно, где будет говориться об успешности выполненной операции.
Теперь жмем кнопку Дополнительно (Advanced), после чего задаем логин и пароль для дальнейшей авторизации скрипта. Я не долго думал, и вписал test/test. - Завершаем все процедуры нажатием кнопки OK, которая вернет нас к окну администрирования источников данных ODBC, где в списке системных источников данных мы можем видеть вновь созданный источник и указание на его драйвер.
Собственно говоря, после всего этого можно переходить непосредственно к самому скрипту, который у нас будет на PHP.
Структура базы данных
Прежде чем приступить к написанию PHP скрипта, давайте создадим таблицу в тестовой базе данных, а заодно немного поговорим о типизации полей в Access.
Для работы с таблицами нашей БД, необходимо открыть файл, который был создан на 4-м шаге, предыдущей части статьи.
В главном меню выбираем вкладку Создание (Create) и жмем на иконку запуска Конструктора таблиц (Table Design).
Откроется окно конструктора. Оно более чем простое для понимания, поэтому, думаю, комментарии будут излишними.
И так, мы добрались до самого интересного, как мне кажется, момента – создание таблицы и типизация ее столбцов. Ниже я приведу список типов и их описание, а пока скажу, что в зависимости от выбранного типа столбца, конструктор предложит ряд параметров. В их число входят и те, с которыми можно столкнуться при работе с любой другой БД: длинна, значение умолчания, уникальность, индекс и т.п. И те, о которых лично я не имею ни малейшего представления, во всяком случае, в том контексте, в котором они предложены. В случае необходимости, я думаю, вы без проблем разберетесь. У меня такой нужды не было, ввиду простоты задачи.
| Тип данных | Описание типа данных |
| Text (Тип данных текстовый) | Для хранения строк, длина которых не должна превышать 255 символов. Значение по умолчанию 50. |
| Memo (Тип данных текстовый) | Для хранения строк, длина которых не должна превышать 64000 символов, поля этого типа не индексируются. |
| Integer (Тип данных числовой) | Числовые данные, размер которых определяется, числом, указанным в свойствах полей. |
| Data, Time | Поля для хранения данных даты и времени. |
| Денежный (Тип данных числовой) | Разновидность числового типа данных для хранения денежных сумм. Длина поля определяется количеством допустимых знаков до запятой (до 15-и) и после (до 4-х). |
| Счетчик (Тип данных числовой) | Числовой тип данных для хранения счетчика. С возможностью автоматического увеличения значения на заданную величину (по умолчанию +1). Поле данного типа имеет уникальный индекс. |
| Логический | Тип данных для хранения логических значений, таких как : true/false, 1/0. |
| Ole | Предназначен для хранения объектов (файлов), которые созданы в других приложениях. Поле не индексируется. |
Ничего неординарного, за исключением того, что auto_increment поле, в отличии от MySQL, например, имеет специальный тип данных – счетчик. Ну и для хранения строк не так много типов данных.
В общем, в итоге я создал простую таблицу, всего из двух полей – auto_increment счетчик и имя пользователя. Для примера этого достаточно, я думаю.
Подключение PHP скрипта к базе данных Access
И так, теперь соорудим небольшой PHP скрипт, которым, в цикле, добавим в нашу базу с десяток как бы пользователей.
Как я уже писал, мы будем работать через odbc драйвер, поэтому в скрипте используем odbc функции из библиотеки, которая, если я ничего не путаю, идут в стандартной поставке PHP.
Процесс подключения к БД происходит следующим образом:
1 2 3 4 5 6 7 | // Connect to database if (!$link = odbc_connect("Test", "test", "test")) { die('Error'); } else { // success echo 'Seuccess<br /><br />'; } |
Функция odbc_connect принемает три параметра. Первый из которых является именем источника данных. Его мы определили в пункте 4 пошагового описания создания DSN. Два других параметра – логин и пароль для доступа к БД.
Если все делали правильно, то увидим многообещающее Success.
Ну а теперь вставим в базу сколько-нибудь строк, который сразу после этого из базы и возьмем. Привожу все одним листингом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | for ($i = 0; $i < 9; $i++) { $user_name = 'UserName_' . $i; odbc_exec($link, "INSERT INTO users (`userName`) VALUES ('$user_name')"); } // Get rows from db $result = odbc_exec($link, 'SELECT id, userName FROM users WHERE 1'); while ($row = odbc_fetch_object($result)) { printf('Id: %d<br />Name: %s<br /><br />', $row->id, $row->userName); } // Close connection odbc_close($link); |
Ну вот и все. Мы решили самую простую задачу – запись и чтение из БД. Все остальное, что может быть полезно, находится на php.net, в разделе описания работы с ODBC и на просторах интернетов, в электронной документации и книгах по Microsoft Access.
Успехов!
Автор: Мурашов Олег
Источник: http://inroot.ru/






Вариант – подключиться к MDB через COM (http://www.php.net/manual/en/class.com.php). В этом случае не потребуется возиться с DSN.
Да, как один из вариантов – использование COM, но в данном случае писал именно о работе через DNS. С целью охватить чуть больше, чем средства PHP.
Ностальгия… )))
Одно время открывал окошко с настройками ODBC, чтоб из “Билдера” достукиваться к базе… Словно “в прошлое окунулся” :)
Большое вам спасибо! Очень драгоценная информация.
Спасибо огромное, очень хорошая и понятная даже не искушённому пользователю статья, что на самом деле редкость!