Как держать форму. Массаж. Здоровье. Уход за волосами

Авторитетный access php. Использование MS Access в PHP

Популярность СУБД Microsoft Access(http://www.microsoft.com/office/access) отчасти объясняется ее удобным графическим интерфейсом. Помимо использования Access в качестве самостоятельной СУБД, вы можете использовать ее графический интерфейс для организации работы с другими базами данных - например, MySQL или Microsoft SQL Server.

Чтобы продемонстрировать поддержку ODBC в РНР, я опишу процесс подключения к базам данных Microsoft Access на РНР. Делается это на удивление просто, но благодаря популярности Microsoft Access это станет полезным дополнением в вашем творческом арсенале. Я опишу этот процесс шаг за шагом:

  1. Создайте базу данных Access. Предполагается, что вы уже умеете это делать, а если не умеете, но все равно хотите проследить за выполнением этого примера, - воспользуйтесь услугами программы-мастера. Я создал стандартную базу данных для хранения контактных данных при помощи мастера. Обязательно создайте в таблице несколько записей и запомните имя таблицы, оно нам вскоре понадобится!
  2. Сохраните базу данных на своем компьютере.
  3. На следующем шаге мы организуем доступ к базе Access средствами ODBC. Выполните команду Пуск > Настройка > Панель управления(Start > Settings > Control Panel). Найдите на панели управления значок Источники данных ODBC(32)(ODBC Data Sources(32 bit)). При помощи этого значка запускается Администратор ODBC, предназначенный для настройки различных драйверов и источников данных в вашей системе. Запустите программу, дважды щелкнув на этом значке. Окно Администратора по умолчанию открывается на вкладке Пользовательский DSN(User DSN). На этой вкладке перечисляются источники данных-, которые относятся к конкретному пользователю и могут использоваться только на этом компьютере. В данном примере будет использоваться именно такой источник данных.
  4. Нажмите кнопку Добавить...(Add...) в правой части окна. Открывается новое окно для выбора драйвера, предназначенного для работы с новым источником. Выберите строку Microsoft Access Driver(*.mdb) и нажмите кнопку Finish(Готово).
  5. На экране появляется новое окно Установка драйвера ODBC для Microsoft Access(ODBC Microsoft Access Setup). Найдите в форме текстовое поле Имя источника данных(Data Source Name) и введите в нем имя созданной вами базы данных Access. При желании можете ввести описание в текстовом поле, расположенном непосредственно под полем Имя источника данных.
  6. Нажмите кнопку Выбрать...(Select...) - появляется окно в стиле Проводника Windows. В нем вам предлагается найти базу данных, доступ к которой будет осуществляться средствами ODBC.
  7. Найдите в дереве каталогов свою базу данных и дважды щелкните на ней. Вы снова возвращаетесь к окну Установка драйвера ODBC для Microsoft Access. Путь к выбранной базе данных отображается над кнопкой Выбрать.... Нажмите кнопку ОК.
  8. Готово! Теперь вы можете работать с базой данных Access средствами ODBC.

Все, что вам остается сделать - создать сценарий, в котором вы будете работать с базой данных через ODBC. В приведенном ниже сценарии общие функции ODBC(см. выше) будут использоваться для вывода всей информации из таблицы контактов, созданной при помощи мастера Access. Однако перед рассмотрением сценария желательно знать, как таблица Contacts выглядит в Access(рис. 11.3).

Рис. 11.3. Таблица Contacts в MS Access

Теперь вы знаете, какая информация будет извлекаться из базы данных, и мы можем перейти к сценарию. Если вы забыли, что делает та или иная функция, обращайтесь к описанию в начале этой главы. Результаты работы листинга 11.7 представлены на рис. 11.4.

Листинг 11.7. Применение функций ODBC для работы с MS Access

Не правда ли, все просто? А самое замечательное - то, что этот сценарий полностью совместим с любой другой СУБД с поддержкой ODBC. Для тренировки попробуйте повторить все описанные действия для другой СУБД, запустите сценарий - и вы получите те же результаты, которые изображены на рис. 11.4.

У меня тоже есть проблема с удаленной базой Microsoft Access. Только удалена у меня база совсем немного. Находится она всего лишь в локальной сети, на другом компе.

На функцию odbc_connect PHP мне выдает такую ошибку:
Warning: odbc_connect() : SQL error: [Драйвер ODBC Microsoft Access] Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем.

Это возникает тогда, когда я у себя в винде, на своем локальном компе, в драйвере ODBC, в свойствах "Источника данных", закладка "Системный DSN", указываю, что "Системная база" (файл рабочих групп - system.mdw) находится на сетевом диске. Как только я тот же самый файл переношу на локальный диск своего компа, (где сижу сам), то все начинает работать нормально. Не могу понять, в чем дело. Подскажите, плиз! Почему-то драйвер ODBC упорно не хочет видеть файл рабочих групп на расшареном сетевом диске. А если файл сидит локально, то все пашет на ура. В чем может быть дело? Кстати, тоже самое происходит и с самой базой. В общем, чтобы odbc_connect сработала нормально, получается, что и "Файл рабочих групп" и сама база, должны находиться на локальном компе. Но я так не могу сделать. База должна остаться там, где она есть. А я должен до нее достучаться удаленно через ODBC и выложить небольшую инфу из базы в инет на страницу сайта. Не могу понять, почему не пашет. В настройках ODBC можно нормально указать все пути к удаленным файлам базы. Но после этого не пашет. На локальном компе все пашет.

На локальном компе стоит:
Операционка WinXP-SP2
Microsoft Access 97
PHP v5.2.3
ODBC v3.5
Appserver v2.5.5

На удаленном компе, стоит "двухтысячный" сервак.
Я было подумал, что может что-то с доступом не пашет и с политикой безопасности. Но я переносил базы и на обычный комп, под операционкой Win 98 и на винчестер под FAT32. Там так же не пашет. Уже весь извелся, не пойму в чем дело. Складывается такое впечатление, что ОДБС вообще не может работать с удаленными базами. Но ведь это не так. Это должно пахать по любому. Помогите, плиииз!

-~{}~ 17.01.08 10:30:

Усе, проблема решена! Ура товарищи!

Все таки я нашел текстовку по своему вопросу:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=251&page=560
Там самый нижний пост. Кому лень туда ломится, то вот дословный копирайт того поста:
"Как я понимаю работаем под виндаками. Нажимаем Ctrl+Alt+Del, выбираем диспетчер задач и смотрим на процесс Apache. И видим что запущен он от имени SYSTEM, а не от вашего. Так что к сетевым ресурсам дойти и не можем. Так что лечим это запуском процесса от нужного имени."

Запустил я Апач от имени пользователя и все стало пахать на ура.

Правда осталась одна засада. ODBC коннект к базе нужно расписывать вручную в программном коде таким образом:
Odbc_Connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=//server/work/baza/mybaza.mdb; systemdb=//server/work/baza/system.mda", "имя пользователя", "пароль") or Die("Не могу соединиться с базой");

Если все тоже самое сделать через виндовый "Администратор ODBC", то пахать все равно не будет. Администратор делает у себя пути через название дисков. То есть таким образом:
"Z:\work\baza"
а мне нужно чтобы путь был сетевой, без буквы диска, и с обратными слешами:
"//server/work/baza/"

Вот еще пример поясняющий эту новую засаду.
Имеем подключенный к компу сетевой диск "Z:\work\baza". Это полный аналог сетевого пути "//server/work/baza/"
Пишем простейший программный код в PHP на открытие удаленного каталога. Без всяких ODBC. Чтобы можно было просто проверить, пашет или не пашет:
OpenDir("Z:\work\baza"); //выдает ошибку
OpenDir("//server/work/baza/"); //ошибки нет

Вот и мой новый вопрос. Что я делаю не так? По любому нельзя будет воспользоваться виндовым "Администратором ODBC" для подключения сетевых ресурсов, или все же можно как-то? Повторюсь, засада теперь осталась лишь с правильным написание путей к сетевым ресурсам. Может за этот момент отвечает какая-то отдельная настройка самого интерфейса PHP?

Если Вы планируете создавать свой динамический сайт на платформе Windows, то у Вас скорее всего возникнет задача выбора СУБД для хранения информации (с языком, на котором Вы будете его программировать, судя по всему, вопросов не возникает). Одним из вариантов её решения, может оказаться использование MS Access в качестве SQL-сервера. Далее будет описано, как в скрипте, написанном на PHP, обратиться к базе данных MS Access.

К сожалению, в PHP нет встроенных средств для работы с этой СУБД, что, однако не исключает совместной их работы - для подключения к базе мы будем использовать ODBC.

Первым делом мы должны создать так называемый DSN Source. Для этого (рассматривается вариант, когда у пользователя установлена ОС Windows 2000 Rus) в панели управления мы должны выбрать пункт Администрирование, а затем Источники данных (ODBC). Далее, в появившемся окне выбираем вкладку системный DSN, нажимаем кнопку добавить, выбираем драйвер MS Access и нажимаем кнопку готово. В поле ввода имя источника данных пишем имя, по которому впоследствии мы сможем обратиться к нашей базе данных, например, test, затем нажимаем кнопку выбрать и указываем, где у нас на диске находится наш файл с БД. Затем, если в этом есть необходимость, можем задать имя пользователя и пароль для доступа к БД через ODBC, нажав на кнопку дополнительно. Теперь, когда у нас есть источник данных ODBC, мы можем воспользоваться функцией odbc_connect для подключения к нашей базе:

$x=odbc_connect("test","test","test");
?>

Чтобы передать запрос в СУБД, мы можем воспользоваться функцией odbc_exec:

$res=odbc_exec($x,"create table test (f1 integer, f2 varchar(10))");
$res=odbc_exec($x,"insert into test (f1,f2) values(1,"qwerty")");
$res=odbc_exec($x,"insert into test (f1,f2) values(2,"asdfgh")");
?>

Если после выполнения этого примера открыть базу test в MS Access, то мы обнаружим, что там появилась новая таблица test с полями f1 и f2 целочисленного и строкового типов соответственно; в таблице будут две записи с данными, которые были указаны в запросе.

К сожалению, не все функции для работы с ODBC корректно работают с MS Access, например, это функции odbc_num_rows и odbc_fetch_array. Так, в той версии PHP, что установлена на моём компьютере, PHP вообще выдаёт сообщение, что функция odbc_fetch_array ему не известна. Но эти проблемы решаются, если описать две следующие функции и использовать их вместо ранее упоминавшихся:

function xodbc_num_rows($sql_id, $CurrRow = 0)
{
$NumRecords = 0;
odbc_fetch_row($sql_id, 0);
while (odbc_fetch_row($sql_id))
{
$NumRecords++;
}
odbc_fetch_row($sql_id, $CurrRow);
return $NumRecords;
}
function xodbc_fetch_array($result, $rownumber=-1) {
if ($rownumber < 0) {
odbc_fetch_into($result, &$rs);
} else {
odbc_fetch_into($result, &$rs, $rownumber);
}
foreach ($rs as $key => $value) {
$rs_assoc = $value;
}
return $rs_assoc;
}

$res=odbc_exec($x,"select * from test");
$cnt=xodbc_num_rows($res);
?>



for ($i=0;$i<$cnt;$i++) {
$row=xodbc_fetch_array($res,$i+1);
echo "";
}
?>
f1f2
".$row["f1"]."".$row["f2"]."

Популярность СУБД Microsoft Access (http://www.microsoft.com/office/access) отчасти объясняется ее удобным графическим интерфейсом. Помимо использования Access в качестве самостоятельной СУБД, вы можете использовать ее графический интерфейс для организации работы с другими базами данных -- например, MySQL или Microsoft SQL Server.

Чтобы продемонстрировать поддержку ODBC в PHP, я опишу процесс подключения к базам данных Microsoft Access на PHP. Делается это на удивление просто, но благодаря популярности Microsoft Access это станет полезным дополнением в вашем творческом арсенале. Я опишу этот процесс шаг за шагом:

  • Создайте базу данных Access. Предполагается, что вы уже умеете это делать, а если не умеете, но все равно хотите проследить за выполнением этого примера, -- воспользуйтесь услугами программы-мастера. Я создал стандартную базу данных для хранения контактных данных при помощи мастера. Обязательно создайте в таблице несколько записей и запомните имя таблицы, оно нам вскоре понадобится!
  • Сохраните базу данных на своем компьютере.
  • На следующем шаге мы организуем доступ к базе Access средствами ODBC. Выполните команду Пуск > Настройка > Панельуправления (Start > Settings > Control Panel). Найдите на панели управления значок Источники данных ODBC (32) (ODBC Data Sources (32 bit)). При помощи этого значка запускается Администратор ODBC, предназначенный для настройки различных драйверов и источников данных в вашей системе. Запустите программу, дважды щелкнув на этом значке. Окно Администратора по умолчанию открывается на вкладке Пользовательский DSN (User DSN). На этой вкладке перечисляются источники данных-, которые относятся к конкретному пользователю и могут использоваться только на этом компьютере. В данном примере будет использоваться именно такой источник данных.
  • Нажмите кнопку Добавить... (Add...) в правой части окна. Открывается новое окно для выбора драйвера, предназначенного для работы с новым источником. Выберите строку Microsoft Access Driver (*.mdb) и нажмите кнопку Finish (Готово).
  • На экране появляется новое окно Установка драйвера ODBC для Microsoft Access (ODBC Microsoft Access Setup). Найдите в форме текстовое поле Имя источника данных (Data Source Name) и введите в нем имя созданной вами базы данных Access. При желании можете ввести описание в текстовом поле, расположенном непосредственно под полем Имя источника данных.
  • Нажмите кнопку Выбрать... (Select...) -- появляется окно в стиле Проводника Windows. В нем вам предлагается найти базу данных, доступ к которой будет осуществляться средствами ODBC.
  • Найдите в дереве каталогов свою базу данных и дважды щелкните на ней. Вы снова возвращаетесь к окну Установка драйвера ODBC для Microsoft Access. Путь к выбранной базе данных отображается над кнопкой Выбрать.... Нажмите кнопку ОК.
  • Готово! Теперь вы можете работать с базой данных Access средствами ODBC.

Все, что вам остается сделать -- создать сценарий, в котором вы будете работать с базой данных через ODBC. В приведенном ниже сценарии общие функции ODBC (см. выше) будут использоваться для вывода всей информации из таблицы контактов, созданной при помощи мастера Access. Однако перед рассмотрением сценария желательно знать, как таблица Contacts выглядит в Access (рис. 11.3).



Рис. 11.3. Таблица Contacts в MS Access

Теперь вы знаете, какая информация будет извлекаться из базы данных, и мы можем перейти к сценарию. Если вы забыли, что делает та или иная функция, обращайтесь к описанию в начале этой главы. Результаты работы листинга 11.7 представлены на рис. 11.4.

Листинг 11.7. Применение функций ODBC для работы с MS Access

// Подключиться к источнику данных ODBC "ContactDB" ;connect = odbc_connect("ContactDB", "","")

or die("Couldn"t connect to datasource.");

// Создать текст запроса

$query = "SELECT First_Name, Last_Name, Cell_Phone, Email FROM Contacts";

// Подготовить запрос

$result = odbc_prepare($connect,$query);

// Выполнить запрос и вывести результаты

odbc_execute($result);

odbc_result_all($result, "BGCOLOR="#c0c0c0" border=1");

// Обработка результатов закончена, освободить память odbc_free_result($result);

// Закрыть соединение odbc_close($connect);

Не правда ли, все просто? А самое замечательное -- то, что этот сценарий полностью совместим с любой другой СУБД с поддержкой ODBC. Для тренировки попробуйте повторить все описанные действия для другой СУБД, запустите сценарий -- и вы получите те же результаты, которые изображены на рис. 11.4.

Рис. 11.4. Содержимое таблицы Contacts в web-браузере