• 6212阅读
  • 12回复

[提问]用QAxObject实现ADO打开Access数据库后如何在TableView上显示? [复制链接]

上一主题 下一主题
离线zy751227
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-04
本人刚开始学习Qt编程,试过Qt用ODBC操作Access数据库,但发现效率比不上ADO方式(同一个Access数据库用Delphi的ADO方式读写30万条记录,Qt的ODBC完成同样的事慢好几倍)所以正在学习Qt用ADO方式操作Access数据库。目前遇到了将数据显示到TableView上的问题,特此求教。

已经用QAxObject实现ADO打开Access数据库,并且可以成功获取Test表的记录数,获取单条记录的数据也不是问题。
问题是如何才能在TableView上显示整个Test表?总不见得用代码去逐个读取并填写Model吧?
QAxObject能否直接返回一个Model给TableView用呢?(类似Delphi中DBGrid直接关联一个数据源,数据源变化DBGrid自动变化)


QAxObjectADOConnection->setControl("ADODB.Connection");
QAxObjectADOConnection->setProperty("ConnectionTimeout",5);
QAxObjectADOConnection->dynamicCall("Open(QString,QString,QString,int)","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb","","",adConnectUnspecified);
ActiveConnection=QAxObjectADOConnection->asVariant();
QAxObjectADORecordset->setControl("ADODB.recordset");
QAxObjectADORecordset->dynamicCall("Open(QString,QVariant,int,int,int)","Test",ActiveConnection,AdOpenStatic,AdLockOptimistic,adCmdTable);
QAxObjectADORecordset->property("RecordCount").toUInt();//这里可以成功获得Test表记录数量
离线roywillow

只看该作者 1楼 发表于: 2015-09-05
目测并没有如此好事……
QAx操作Excel也是非常慢的我感觉,特别是逐项写入
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zy751227

只看该作者 2楼 发表于: 2015-09-05
回 roywillow 的帖子
roywillow:目测并没有如此好事……
QAx操作Excel也是非常慢的我感觉,特别是逐项写入 (2015-09-05 10:27) 

多谢!

原来Qt很多事情需要DIY啊。

还真有点不太习惯:)
离线z55716368

只看该作者 3楼 发表于: 2015-09-06
回 roywillow 的帖子
roywillow:目测并没有如此好事……
QAx操作Excel也是非常慢的我感觉,特别是逐项写入 (2015-09-05 10:27) 

请问如何在linux下面使用QAx 因为在windows下面调试完成现在移植到linux 但是卡在这里了 网上也没有找到有用的资料、、、
每一个问题 都是一次进步
离线roywillow

只看该作者 4楼 发表于: 2015-09-06
回 z55716368 的帖子
z55716368:请问如何在linux下面使用QAx 因为在windows下面调试完成现在移植到linux 但是卡在这里了 网上也没有找到有用的资料、、、 (2015-09-06 18:08) 

怎么可能在linux下用qax嘛哈哈哈哈……这是微软搞出来的东西
当然你可以写个windows应用然后用wine封装……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线bingyifeng

只看该作者 5楼 发表于: 2015-09-06
一次显示30w条估计意义不大,
是否考虑分页?
每次少取点?
<span style="color:blue ">淘宝,绿石斋</span> <a href="http://shop33295817.taobao.com“> <span style="color:blue ">各种水晶饰品,手链,项链 </span></a>
离线zy751227

只看该作者 6楼 发表于: 2015-09-06
回 bingyifeng 的帖子
bingyifeng:一次显示30w条估计意义不大,
是否考虑分页?
每次少取点?  (2015-09-06 21:27) 

不是一次显示多少的问题,而是有没有这个功能的问题。
QAxObject能否直接返回一个Model给TableView用。
离线z55716368

只看该作者 7楼 发表于: 2015-09-07
回 roywillow 的帖子
roywillow:怎么可能在linux下用qax嘛哈哈哈哈……这是微软搞出来的东西
当然你可以写个windows应用然后用wine封装…… (2015-09-06 18:29) 

那不就是坑了一发、、、、、、、、、、、、、、、、、、、、、、、、、、、、
每一个问题 都是一次进步
离线圣域天子

只看该作者 8楼 发表于: 2015-09-07
为啥不用QSqlQuery找开,取到 TableView中去呢???
离线zy751227

只看该作者 9楼 发表于: 2015-09-17
回 圣域天子 的帖子
圣域天子:为啥不用QSqlQuery找开,取到 TableView中去呢??? (2015-09-07 09:07) 

因为QSqlQuery操作Access是ODBC方式
我想试一下ADO方式操作Access
离线圣域天子

只看该作者 10楼 发表于: 2015-09-18
是ODBC或ADO,跟QSqlQuery本身没关系,是看QSqlDatabase连接时用了哪个sqldriver 。
估计只要写个driver就可以了,不知道谁搞过。
离线bingyifeng

只看该作者 11楼 发表于: 2015-09-18
回 zy751227 的帖子
zy751227:不是一次显示多少的问题,而是有没有这个功能的问题。
QAxObject能否直接返回一个Model给TableView用。 (2015-09-06 22:13) 

应该没有这样的model。要么自己实现一个mode 要么如 圣域天子 说的 实现一个 driver

具体可以参照 odbcdriver 代码,做一个plugin
<span style="color:blue ">淘宝,绿石斋</span> <a href="http://shop33295817.taobao.com“> <span style="color:blue ">各种水晶饰品,手链,项链 </span></a>
离线zy751227

只看该作者 12楼 发表于: 2015-09-18
回 圣域天子 的帖子
圣域天子:是ODBC或ADO,跟QSqlQuery本身没关系,是看QSqlDatabase连接时用了哪个sqldriver 。
估计只要写个driver就可以了,不知道谁搞过。
 (2015-09-18 13:07) 

谢谢总版解答!
我只是业余玩家,编写驱动难度有点大

本来就是在测试Qt操作Access的ODBC和ADO方法时突发奇想提出的这个无厘头问题,既然不是简单就能实现的就不做深究了。
快速回复
限100 字节
 
上一个 下一个