PHP и Microsoft Access

5

С базой данных Access, которую можно найти в офисном пакете Microsoft Office, последний раз я имел возможность общаться еще в те далекие годы, когда учился на первом курсе университета. Нужно заметить, что после знакомства и поверхностного изучения этой БД, впечатления остались не из приятных. Уже тогда у меня был богатый опыт работы с MySQL и некоторые навыки работы с Oracle. На их фоне Access казался немощным, отсталым в развитии и просто неудобным. А неотъемлемый графический интерфейс и активно навязываемые билдеры и «мастера» просто сводили меня с ума.

Как бы там ни было, но с этой БД я встретился вновь, уже в рамках коммерческого заказа, задачей которого ставилась необходимость перенести часть данных из MySQL базы данных.

Казалось бы, чего тут сложного? На локальной машине можно не думать о производительности и нагрузках. Несколько десятков тысяч запросов в теле цикла никого не расстроят. Синтаксис SQL отличаться не должен, так как запросы предполагаются крайне простые. Но вот с планированием и реализацией структуры таблиц в Access оказалось не все так очевидно и легко. Типизация данных у Access достаточно своеобразная. Об этом и еще некоторых нюансах и пойдет речь дальше.

Microsoft Access. Создание базы данных и настройка подключения

Прежде чем приступить к настройке подключения к базе данных, необходимо установить Microsoft Access, конечно, если вы этого еще не сделали. Access входит в офисный пакет и ставится аналогично любому другому компоненту этого пакета. Полагаю, с этим вы справитесь!

Впервые я настраивал подключение под ОС Windows XP, но в данном случае описываю тот же процесс под Windows Seven. Если мне не изменяет память и я ничего не путаю, то никакой разницы я не заметил. Это я к тому, что если ваша ОС отличается, ничего страшного. Проблем возникнуть не должно.

И так, в порядке очередности проделываем следующее:

  1. Создаем DSN (Data Source Name). Для этого отправляемся в Панель управления > Администрирование > Источники данных (ODBC)
    (Control Panel > Administrative Tools > Data Sources (ODBC))
  2. Активируем вкладку Системный DSN (System DSN)
    У вас список источников данных (User Data Sources) должен быть пустым, а у меня, как видно на скришноте, там уже есть один источник данных. Это профиль Access, который я использовал в работе. Мы создадим новый.

    System DSN

  3. Смело жмем кнопку Добавить (Add) и видим достаточно большой список имеющих драйверов (а может быть и маленький).

    Add new data source

    Через ODBC драйвер можно работать не только с Access, но и с еще добрым десятком баз данных, среди которых MySQL и PostgreSQL. Но это не наш случай, и мы выбираем драйвер Driver do Microsoft Access (*.mdb).

  4. В открывшемся диалоговом окне необходимо задать желаемое имя источника данных. Также можете задать описание, если в этом есть необходимость.

    Installation ODBC driver for Microsoft Access

    В блоке База данных (Database) жмем кнопку Создать и в открывшемся окне указываем путь до директории, где будет создана база данных – файл с расширением mdb. Если все правильно, то появится всплывающее окно, где будет говориться об успешности выполненной операции.
    Теперь жмем кнопку Дополнительно (Advanced), после чего задаем логин и пароль для дальнейшей авторизации скрипта. Я не долго думал, и вписал test/test.

  5. Завершаем все процедуры нажатием кнопки OK, которая вернет нас к окну администрирования источников данных ODBC, где в списке системных источников данных мы можем видеть вновь созданный источник и указание на его драйвер.

    System DSN

    Собственно говоря, после всего этого можно переходить непосредственно к самому скрипту, который у нас будет на 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 счетчик и имя пользователя. Для примера этого достаточно, я думаю.

Скачать пример базы данных Access

Access test table

Подключение 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/

PHP

Комментарии (5 комментариев)

  1. Вариант – подключиться к MDB через COM (http://www.php.net/manual/en/class.com.php). В этом случае не потребуется возиться с DSN.

  2. Олег Мурашов, июня 17, 2010 at 19:55 Сказал:

    Да, как один из вариантов – использование COM, но в данном случае писал именно о работе через DNS. С целью охватить чуть больше, чем средства PHP.

  3. Ностальгия… )))
    Одно время открывал окошко с настройками ODBC, чтоб из “Билдера” достукиваться к базе… Словно “в прошлое окунулся” :)

  4. Вадим, января 6, 2011 at 23:08 Сказал:

    Большое вам спасибо! Очень драгоценная информация.

  5. Максим, февраля 20, 2011 at 18:25 Сказал:

    Спасибо огромное, очень хорошая и понятная даже не искушённому пользователю статья, что на самом деле редкость!

Оставить комментарий