我已经在这几个小时了。我正在尝试在访问数据库上显示给定表的主键。首先是尝试odbc_primarykeys
功能,然后尝试odbc_statistics
。
两者都给出错误:
odbc_primarykeys():SQL错误:无法获取错误消息SQL SQLPrimaryKeys中的状态HY000
和
odbc_statistics():SQL错误:无法获取错误消息,SQL状态 SQLStatistics中的HY000。
这是我的代码:
$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
)留空并得到相同的错误。 Google搜索中的HY000错误没有多大帮助,php.net页面的支持率令人惊讶。 odbc_field_len
&等功能odbc_field_type
在页面上正常工作。有什么见解吗?
答案 0 :(得分: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
)