MFC通过ADO连接access数据库:出现运行期错误Debug Assertion Faild还有什么Runtime Error

voidCCompusEApp::OnInitADOConn(void){//初始化OLE/COM库环境::CoInitialize(NULL);try{//创建conn... void CCompusEApp::OnInitADOConn(void)
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
//创建connection对象
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
//_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xiaoyuan.mdb";//"uid=;pwd=;DRIVER={Microsoft Access Driver(*.mdb)};DBQ=xiaoyuan.mdb;";
//SERVER和UID,PWD的设置根据实际情况来设置
m_pConnection->Open((_bstr_t)"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\data\\xiaoyuan.mdb","","",adModeUnknown);
}
//捕捉异常
catch(_com_error e)
{
//显示错误信息
AfxMessageBox(e.Description());
}
}

下面的代码是在另一个cpp文件中
void CDialog1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialog1)
DDX_Control(pDX, IDC_TREE1, m_TreeCtrl);
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
//}}AFX_DATA_MAP
m_ListCtrl.SetExtendedStyle(
LVS_EX_FLATSB // 扁平风格滚动
|LVS_EX_FULLROWSELECT // 允许正航选中
|LVS_EX_HEADERDRAGDROP // 允许标题拖拽
|LVS_EX_ONECLICKACTIVATE // 高亮显示
|LVS_EX_GRIDLINES // 画出网格线
);
m_ListCtrl.InsertColumn(0,"姓名",LVCFMT_LEFT,120,0);
m_ListCtrl.InsertColumn(1,"ID号",LVCFMT_LEFT,120,0);
m_ListCtrl.InsertColumn(2,"性别",LVCFMT_LEFT,120,0);
m_ListCtrl.InsertColumn(3,"专业",LVCFMT_LEFT,120,0);
m_ListCtrl.InsertColumn(4,"班级",LVCFMT_LEFT,120,0);
m_ListCtrl.InsertColumn(5,"账户(元)",LVCFMT_LEFT,120,0);
/*m_ListCtrl.InsertItem(0, "");*/
CCompusEApp m_AdoConn;
//打开数据库连接
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format("SELECT * FROM students order by 学号 desc");
_RecordsetPtr m_pRecordset;
//打开记录集
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
//遍历记录集
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_ListCtrl.InsertItem(0,"");
//将记录集字段中得记录添加到列表控件中
m_ListCtrl.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("姓名"));
m_ListCtrl.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("ID号"));
m_ListCtrl.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("性别"));
m_ListCtrl.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("专业"));
m_ListCtrl.SetItemText(0,4,(char*)(_bstr_t)m_pRecordset->GetCollect("班级"));
m_ListCtrl.SetItemText(0,5,(char*)(_bstr_t)m_pRecordset->GetCollect("账户"));
//使记录集指向下一条记录
m_pRecordset->MoveNext();
}
//断开数据库连接
m_AdoConn.ExitConnect();
用的是VS2008编程
展开
 我来答
mayelkid
2013-04-04 · 超过27用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:56.1万
展开全部
你的SQL查询语句是sql.Format("SELECT * FROM students order by 学号 desc");但是遍历字段中是ID号,看一下这里有没有错!
追问
嗯    我把遍历那里改成学号后虽然还会出现Debug Assertion Faild这个错误提示,但忽略后能进入Dialog看到数据表中的数据显示在列表中,是不是还有什么问题?
追答
VS2008我没用过,要是VC6的话可以通过下面方法检查出问题:
1。按F5运行你的程序
2。在出错时,选择“重试”
3。按ALT+7调出“调用栈”窗口
4。双击从上往下的最近一个自己定义的函数,系统会自动把该函数所在的文件显示出来,此时程序就暂停在光标处。一般来说错误就出在这附近。你可以通过查看变量的值来确认。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式