MS Access ADO 记录集和二维数组

Posted

技术标签:

【中文标题】MS Access ADO 记录集和二维数组【英文标题】:MS Access ADO recordset and two dimensional array 【发布时间】:2017-10-20 17:36:42 【问题描述】:

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

错误:可捕获的致命错误:类变体的对象无法 在...中转换为字符串

$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

【问题讨论】:

你能显示/打印 $dizi 数据吗? print_r($dizi); 确实,$dizi 是否为空?运行var_dump($dizi)。好奇,你没有PDO-ODBC 用php API 而不是COM 接口连接到MS Access 吗? 【参考方案1】:

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

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

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

【讨论】:

感谢您的回答。我解决了。我在数据库中有字符串数据,但没有自动转换为字符串。我将变体对象转换为字符串。 $dizi[$a][0]=(字符串)$rs[0]; 您的查询是单列结果集吗?我和@bato3 在一起,奇怪的是不需要 fields 属性或命名字段。 @Parfait ADO 和 DAO 记录集都支持rs(fieldnum) 语法来访问字段(恕我直言,您不应该使用它,因为我更喜欢显式代码)。至于答案,据我所知,实际正确的方法是$rs[0]-&gt;Value$rs-&gt;fields[0]-&gt;Value。 value 属性应该只是一个字符串,不需要进一步转换。【参考方案2】:

我刚刚解决了。当我将变体对象转换为字符串时,它的作用是 $dizi[$a][0]=(字符串)$rs[0];

【讨论】:

以上是关于MS Access ADO 记录集和二维数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Excel 中显示来自 Access 的二维数组记录集?

delphi二维数组定义 赋值

如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?

MS Access - ADO 记录集,使用 SQL 语句检索数据和建表

使用类模块将可编辑的 ADO 记录集返回到 MS Access 表单

获取从 PHP ADO 连接返回到 MS-Access DB 的 JSON