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->fields[0]
property。 (是的,你使用这种方法)
【讨论】:
感谢您的回答。我解决了。我在数据库中有字符串数据,但没有自动转换为字符串。我将变体对象转换为字符串。 $dizi[$a][0]=(字符串)$rs[0]; 您的查询是单列结果集吗?我和@bato3 在一起,奇怪的是不需要 fields 属性或命名字段。 @Parfait ADO 和 DAO 记录集都支持rs(fieldnum)
语法来访问字段(恕我直言,您不应该使用它,因为我更喜欢显式代码)。至于答案,据我所知,实际正确的方法是$rs[0]->Value
或$rs->fields[0]->Value
。 value 属性应该只是一个字符串,不需要进一步转换。【参考方案2】:
我刚刚解决了。当我将变体对象转换为字符串时,它的作用是 $dizi[$a][0]=(字符串)$rs[0];
【讨论】:
以上是关于MS Access ADO 记录集和二维数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Excel 中显示来自 Access 的二维数组记录集?
如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?
MS Access - ADO 记录集,使用 SQL 语句检索数据和建表