2015-04-22 2 views
1

Я был на этом несколько часов. Я пытаюсь отобразить первичный ключ данной таблицы в базе данных доступа. Сначала он пытался использовать функцию odbc_primarykeys, а затем попробовал odbc_statistics.Отображение первичного ключа через PHP и MS Access 2010

Оба дают ошибку:

odbc_primarykeys(): SQL error: Failed to fetch error message, SQL state HY000 in SQLPrimaryKeys

и

odbc_statistics(): SQL error: Failed to fetch error message, SQL state HY000 in 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 хорошо работать на странице. Любое понимание?

ответ

0

Я уверен, что нет способа получить эту информацию через драйвер Access 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 
) 
Смежные вопросы