2017-10-20 105 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];