正文

baidu记录VC访问ACCESS2007-08-27 10:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/28876.html

分享到:

VC调用ACCESS数据库,高分求助
悬赏分:100 - 解决时间:2006-12-16 13:55
刚开始学习VC,学编程刚入门,很多都不懂,就下载了一个源代码来修改,源代码经简单调试后可以运行,可以调用ACCESS数据库,但是数据库是97版的。我想把数据库的字段增多,改为我希望的样子,也就是添加了10个名目。只好转换为2003后修改再改回97保存。VC的程序里面,所有原来涉及的字段我都修改了,并在对话框里也加了TEXT,命名为IDC-TEL、IDC-FAX等,现在调试完成后,可执行文件也生成了,主程序有时候又可以运行,但是读取MDB就弹出严重错误,然后只能关闭。有时候又不能运行,出错“DEBUG ASSERTION FAILED!”和终止忽略调试,我该怎么办呢?

有高手愿意指导,或者帮我调就感谢了
最佳答案
1:针对问题解决问题。
将库从XP转到2003,是没有问题的,在转回去也可以。但是从97转到2003就有问题了,起初我也遇到类似的问题。你说的是出错现象,我们无法猜想出你的程序

哪里有问题,出现bug。建议你在对数据库操作的时候都加上断言(assert),
参考资料 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconassert.asp
或者在对数据库操作的时候都加上错误处理(try{...}catch(...){...}),这样就可以知道错误出现在哪里,例如:
BOOL CODBCHandle::SetConnection(CString strDSN, CString strUID, CString strPWD)
{
CString str;
str.Format("DSN=%s;UID=%s;PWD=%s", strDSN, strUID, strPWD);
BOOL bStatus = FALSE; //数据库是否成功打开
m_database.SetLoginTimeout(3); //连接超时属性
try
{
if(!m_database.IsOpen())
{
bStatus = m_database.OpenEx(str, CDatabase::openReadOnly | CDatabase::noOdbcDialog);
if(bStatus)
AfxMessageBox("连接成功.");
}
}
catch(CMemoryException *pEx) //处理内存异常
{
pEx->ReportError();
return FALSE;
}
catch(CDBException *pDBEx) //处理数据库异常
{
pDBEx->ReportError();
TRACE("RetCode:%d strError:[%s] strState:[%s]\n", pDBEx->m_nRetCode, pDBEx->m_strError, pDBEx->m_strStateNativeOrigin);
return FALSE;
}
return TRUE;
}
try{...}catch(...){...}参考资料 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfthetrycatchstatement.asp
以上是追踪错误处理。但是不知道你的程序是什么样的,所以不知道怎么处理。
2:方法
用vc访问Access数据库,就向上面朋友说的那样就可以。操作Access可以不通过数据源,直接对其访问。
访问数据库的模型一般为ODBC,DAO,ADO等。上面的朋友就用的是ADO,你可以看看,他在开始时,在程序里引进了msado15.dll 动态库。这里面封装了ADO的对象、

方法和属性等等。然后初始化COM库,再用_ConnectionPtr对象(它就是ADO的3个对象之一)进行连接数据库,_RecordsetPtr对象是记录集对象,我们对库的操作

大多就是对它的操作,它里面有好多函数,你可以查MSDN。
我上面的代码是用ODBC方式连接,ODBC方式是最地层的,也是通用的模式。可以说他支持任何库。关于ODBC,微软提供了CDatabase类和CRecordset类,使用方法

和以上差不多。有什么问题再聊。
建议以后把问题说的清楚一些,要不我们帮不上你什么忙了。
回答者:VC程序员 - 试用期 一级 11-2 13:51
对最佳答案的评论
在VC中利用ADO技术连接数据库时,想从一条记录中读取个字段的值,我只知道读取字段类型为文本时是这样的, _variant_t var; CString bl; var=m_Rct->GetCollect("字段名"); if(var.vt!=VT_NULL) bl=(LPCSTR)_bstr_t(var); 那么,如果字段类型为整形或着float型,或者是日期性等其他类型时,怎样用这种方法读取?希望哪位高手能指点一下,本人将不胜感激!
评论者: xyzdhl - 试用期 一级
其他回答
共 1 条

阅读(4164) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册