Я был в этом в течение нескольких часов. Я пытаюсь отобразить первичный ключ данной таблицы в базе данных доступа. Сначала пытался odbc_primarykeys
функция, а затем попытался odbc_statistics
,
Оба дают ошибку:
odbc_primarykeys (): ошибка SQL: не удалось получить сообщение об ошибке, SQL
состояние HY000 в SQLPrimaryKeys
а также
odbc_statistics (): ошибка SQL: не удалось получить сообщение об ошибке, состояние SQL
HY000 в SQLStatistics.
Вот мой код:
$dbu = realpath('E:\AccessBackEnds\Universal\UniversalBackEnd.accdb');
$connu = odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$dbu",'','') or die ("Unable to connect to server");
$result1 = odbc_primarykeys($connu, "UniversalBackEnd", "Administrators", "UserInformation");
$result2 = odbc_statistics($connu, "UniversalBackEnd", "Administrators", "UserInformation", 1, 0);
Я пытался оставить имя базы данных (UniversalBackEnd
) и владелец (Administrators
) пустым и получил ту же ошибку. Ошибка HY000 в поиске Google не сильно помогла, и php.net страницы на удивление легки в поддержке. Функции как odbc_field_len
& odbc_field_type
отлично работает на странице. Любое понимание?
Я почти уверен, что нет способа получить эту информацию через драйвер ODBC для доступа. Вы, вероятно, должны будете использовать com_dotnet
и ACE DAO, чтобы получить его:
$pkFields = array();
$dbe = new COM("DAO.DBEngine.120");
$db = $dbe->OpenDatabase("C:\\Users\\Public\\foo.accdb");
$tbd = $db->TableDefs("Table2");
foreach ($tbd->Indexes as $idx) {
if ($idx->Primary) {
foreach ($idx->Fields as $fld) {
$pkFields[] = $fld->Name;
}
break;
}
}
$db->Close();
print_r($pkFields);
Пример результата для таблицы с двумя полями (столбцами) в качестве ее первичного ключа:
Array
(
[0] => City
[1] => State
)
Других решений пока нет …