2017-10-20 104 views
0

我有一个MS Access数据库。我想获取记录,然后写入二维数组。我可以但我认为记录集内存区和阵列内存区相同。因为如果我关闭记录集,我无法访问数组值。MS Access ADO记录集和二维数组

Error: Catchable fatal error: Object of class variant could not be converted to string in ...

$databaselocation = $_SERVER['DOCUMENT_ROOT'] . "ornek.mdb"; 
$conn = new COM('ADODB.Connection') or exit('Cannot start ADO.'); 
$conn->Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=$databaselocation"); 

$SQL1 = "SELECT * from konu"; 
$rs = new com("ADODB.RecordSet") or die("Recordset cant create!"); 
$rs->Open($SQL1,$conn,1,3); 
$say = $rs->RecordCount(); 
echo "Row Counts: " . $say . "<br><br>"; 

$dizi = array(array()); 


for($a=0; $a<$say; $a++) 
{ 
    $dizi[$a][0] = $rs[0]; 
    $dizi[$a][1] = $rs[1]; 
    $rs->MoveNext; 
} 

$rs->Close(); $conn->Close(); 
$rs = null; $conn = null; 

echo $dizi[0][0];  // this line ERROR same below 

for($a=0; $a<$say; $a++) 
{ 
    echo $dizi[$a][0] . " - " . $dizi[$a][1] . "<br>"; // ERROR 
} 
+0

你可以显示/打印$ dizi数据。的print_r($笛子); –

+0

确实,'$ dizi'是否为空?运行'var_dump($ dizi)'。好奇,你有没有[PDO-ODBC](http://php.net/manual/en/ref.pdo-odbc.php)连接到MS Access与PHP API而不是COM接口? – Parfait

回答

0

$rs你没有字符串值,但特殊COM对象。通常它会自动转换为string。在这种情况下,在任何单元格中都有一些奇怪的值,例如公式。

尝试variant_get_type()Constants list和检查$rs[0],$rs[1]使用前。

如果我记得你应该使用$rs->fields[0]property。 (是的,你使用这种方法)

+0

谢谢你的回答。我解决了。我有数据库中的字符串数据,但不会自动转换为字符串。我将变体对象转换为字符串。 $笛子[$一个] [0] =(字符串)$ RS [0]; –

+0

您的查询是一列结果集?我与@ bato3,这是奇怪的没有*字段*属性或命名字段是必要的。 – Parfait

+2

@Parfait ADO和DAO记录集都支持'rs(fieldnum)'语法来访问字段(因为我更喜欢明确的代码,所以不应该使用它)。至于答案,据我所知,实际的正确方法是$ rs [0] - > Value或$ rs-> fields [0] - > Value。值属性应该只是一个字符串,而不需要进一步的投射。 –

0

我刚才解决了。当我把变体对象字符串它的工作作为 $ dizi [$ a] [0] =(字符串)$ rs [0];