|
|
|
| Добрый вечер (день). Подскажите пожалуйста начинающему, возможен ли доступ к базам данных Access(запись, чтение) при помощи PHP?
Если да, пожалуйста приведите пример запроса на чтение
Зараннее спасибо за ответы! | |
|
|
|
|
|
|
|
для: anatoliy
(24.04.2007 в 23:32)
| | Использование OLE - из PHP можно "связаться" с драйверами ADO и получить/изменить/добавить данные.
Например создать базу данных:
function CreateADOBase ($filename) {
$guid_str = 'DAO.DBEngine.36'; // либо 'DAO.DBEngine.35', в зависимости от версии
$SERW = new COM($guid_str);
$init_str = ";LANGID=0x0409;CP=1252;COUNTRY=0";
$SERW->Workspaces[0]->CreateDatabase($filename, $init_str, 32);
}
|
Остальные методы, доступные в интерфейсе можете найти в MSDN или другой документации, либо взять Delphi (6-7), там уже есть классы-обертки над этим интерфейсом и перечисленны его методы.
Также К. Гетц в "Access. Сборник рецептов", говорит о DAP (Data Access Pages) - Страницы доступа к данным, но я, честно говоря, толку этой технологии не вижу, т.к. здесь данные обрабатывает пользователь, соответственно у него должна стоять ADO, да и в PHP такой вариант, наверное, не воткнешь. | |
|
|
|
|
|
|
|
для: Wyfinger
(25.04.2007 в 15:06)
| | Чуть покопал в эту сторону (тема интересная и нужная), вот результат.
Распечатка таблицы базы данных:
<?php
function PrintMDBTable($filename, $tablename) {
$guid_str = 'DAO.DBEngine.36'; // либо 'DAO.DBEngine.35', в зависимости от версии
$SERW = new COM($guid_str);
$WS = $SERW->Workspaces(0);
$DB = $WS->OpenDataBase("$filename");
$RS = $DB->OpenRecordset("$tablename");
$FieldCount = $RS->Fields->Count;
Print "Database Name: <b>'$filename'</b><br>\n";
Print "Table Name: <b>'$tablename'</b><br><br>\n";
Print "Fields Count: <b>$FieldCount</b><br><br>\n";
Print "<b>Data:</b><br><table border=0 cellspacing=0 cellpadding=4>\n";
Print "<tr bgcolor=#CCCCCC>\n";
// Заголовки полей таблицы
for ($i=0; $i<$FieldCount; $i++) {
$CellValue = $RS->Fields($i);
Print "<td>".strval($CellValue->Name)."</td>\n";
}
Print "</tr>\n";
// Печать самих данных
$RS->MoveFirst();
while (!($RS->EOF)) {
Print "<tr>\n";
for ($i=0; $i<$FieldCount; $i++) {
$CellValue = $RS->Fields($i);
Print "<td>".strval($CellValue->Value)."</td>\n";
}
Print "</tr>\n";
$RS->MoveNext();
}
}
?>
|
Примечание: Код не закрывает ссылки на интерфейс DAO, это сделано из расчета дальнейшего использования, поскольку подключение к базе занимает некоторое время. Чтобу закрыть подключение нужно вручную удалить объект $SERW.
Чтобы выполнять запросы (в т.ч создавать новые таблицы, удалять старые или редактировать структуру, а также создавать индексы) нужно пользоваться методом Execute базы данных ($DB), добавление новых записей -
$RS->AddNew();
// Заполнение
$RS->Id->Value = 1; // Id - имя поля
$RS->Update();
|
Остальные методы интерфейса можно подчерпнуть из файла DAOXP.pas (см. Приложение). | |
|
|
|
|
|
|
|
для: Wyfinger
(27.04.2007 в 08:50)
| | Большое спасибо Wyfinger за приведенный пример !!! Теперь понадобится немного времени чтобы со всем этим разобраться... | |
|
|
|
|
|
|
|
для: anatoliy
(24.04.2007 в 23:32)
| | Проще некуда.... Надо через Панель управление, Администрирования, Источники данных, Системный дсн зарегистрировать вашу базу с определенным имененем...
А затем через odbc_connect подключаться к ней, а черех odbc_exec выполнять запросы... | |
|
|
|
|
|
|
|
для: kail_braslovski
(25.04.2007 в 17:26)
| | Большое спасибо kail_braslovski за указанное направление для решения данной проблемы!!!. До этого пробовал разобраться сам не получалось. Проблема как оказалось была в Системном DSN, а я пробовал с пользовательским и файловым. Сейчас всё заработало! Сейчас разбираюсь с вариантом предложенным Wyfinger. Ещё раз спасибо! | |
|
|
|