在datagrid中显示_RecordsetPtr记录集的问题(在线等)

时间:2021-04-12 17:56:50
代码如下:
_ConnectionPtr m_DBCnt;
m_DBCnt.CreateInstance(__uuidof(Connection));
//第一种打开数据库的方式:通过ODBC数据源
m_DBCnt->Open("DSN=db;UID='';PWD=''","","",-1);
//第二种打开数据库的方式:通过Jet引擎
//m_DBCnt->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb","","",adModeUnknown);


_RecordsetPtr MySet;
MySet.CreateInstance(__uuidof(Recordset)); 
CString sel("SELECT * FROM city");

MySet->Open(sel.AllocSysString(),m_DBCnt.GetInterfacePtr(),adOpenStatic,adLockPessimistic  ,adCmdText);
m_grid.SetRefDataSource(MySet);
问题:
为什么用第二种方式打开的数据库在datagrid中不能显示?????

8 个解决方案

#1


MySet->Open(sel.AllocSysString(),m_DBCnt.GetInterfacePtr(),adOpenStatic,adLockPessimistic  ,adCmdText);
m_grid.SetRefDataSource(MySet);

你把上面两句改成下面的样子试试看:
MySet->Open(sel.AllocSysString(),_variant_t((IDispatch*)m_DBCnt,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
m_grid.SetRefDataSource(NULL);
m_grid.SetRefDataSource( (LPUNKNOWN) MySet);
m_grid.Refresh();

#2


m_DBCnt->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb","","",adModeUnknown);
---------------------------------------------------
1.db.mdb是在你的当前目录下面吗?

2.MySet->Open((LPTSTR)sel.GetBuffer(130),_variant_t((IDispatch m_DBCnt),true),
adOpenDynamic,adLockPessimistic,adCmdText);

#3


//第二种打开数据库的方式:通过Jet引擎
//m_DBCnt->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb","","",adModeUnknown);

Data Source里加数据库的绝对路径!

#4


补充一下:
用第二种打开数据库的方式:通过Jet引擎。打开的记录集中是有数据的,只是不能在datagrid中显示。
用绝对路径我也试过了,不行!

#5


谢谢大家的回复,谢谢!

#6


提供一个资料
在http://www.vckbase.net/document/viewdoc/?id=1164有一篇介绍的文章,他用的jet引擎就能显示,大家可以参考一下他的文章,我看了,但是仍然没有找到毛病.

#7


你再新建一个datagrid,把记录集与这个新的datagrid绑定试试看。。

#8


谢谢大家的捧场

#1


MySet->Open(sel.AllocSysString(),m_DBCnt.GetInterfacePtr(),adOpenStatic,adLockPessimistic  ,adCmdText);
m_grid.SetRefDataSource(MySet);

你把上面两句改成下面的样子试试看:
MySet->Open(sel.AllocSysString(),_variant_t((IDispatch*)m_DBCnt,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
m_grid.SetRefDataSource(NULL);
m_grid.SetRefDataSource( (LPUNKNOWN) MySet);
m_grid.Refresh();

#2


m_DBCnt->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb","","",adModeUnknown);
---------------------------------------------------
1.db.mdb是在你的当前目录下面吗?

2.MySet->Open((LPTSTR)sel.GetBuffer(130),_variant_t((IDispatch m_DBCnt),true),
adOpenDynamic,adLockPessimistic,adCmdText);

#3


//第二种打开数据库的方式:通过Jet引擎
//m_DBCnt->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb","","",adModeUnknown);

Data Source里加数据库的绝对路径!

#4


补充一下:
用第二种打开数据库的方式:通过Jet引擎。打开的记录集中是有数据的,只是不能在datagrid中显示。
用绝对路径我也试过了,不行!

#5


谢谢大家的回复,谢谢!

#6


提供一个资料
在http://www.vckbase.net/document/viewdoc/?id=1164有一篇介绍的文章,他用的jet引擎就能显示,大家可以参考一下他的文章,我看了,但是仍然没有找到毛病.

#7


你再新建一个datagrid,把记录集与这个新的datagrid绑定试试看。。

#8


谢谢大家的捧场