标题:怎样在一个已经建立好的工程中添加ODBC功能?
只看楼主
ysubmarine
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-6-17
 问题点数:0 回复次数:4 
怎样在一个已经建立好的工程中添加ODBC功能?
同题.
搜索更多相关主题的帖子: ODBC 工程 
2005-06-17 19:14
ysubmarine
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-6-17
得分:0 
上次发的帖子问题没有说清楚:已经建立的工程,没有选择“database support”,现在需要添加ODBC功能,怎样作?《VC++技术内幕》(第五版)31章提到一种方法,试后不管用,请问大家有什么好的经验对策,还请大家不吝赐教。谢谢。
2005-06-18 19:02
great6789
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-12-29
得分:0 

如果要使用Crecordset类,则添加此类的派生类,
同时要保证StdAfx.h中,加入#include<stddb.h>

2006-03-27 16:30
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
得分:0 

如为连接ODBC数据源

在XXXApp添加几个必要的变量.
public:
_RecordsetPtr m_pADOSet;
int m_iLoginCount;
CString m_sCurrentUser;
private:
_ConnectionPtr ADOConn;
添加函数.
public:
bool ADOExecute(_RecordsetPtr &ADOSet,_variant_t &strSQL);

最后手工添加一个外部变量的声明.
extern XXXApp theApp;

在StdAfx.h中添加下列代码.
#import "C:\Program files\common files\System\ado\msado15.dll" no_namespace \
rename("EOF","EndOfFile") \
rename("LockTypeEnum","newLockTypeEnum")\
rename("DataTypeEnum","newDataTypeEnum")\
rename("FieldAttributeEnum","newFieldAttributeEnum")\
rename("EditModeEnum","newEditModeEnum")\
rename("RecordStatusEnum","newRecordStatusEnum")\
rename("ParameterDirectionEnum","newParameterDirectionEnum")

在XXXApp类的InitIstance()函数中添加下列代码.
m_iLoginCount=0;
if(FAILED(::CoInitialize(NULL)))
{
AfxMessageBox("ADO Init failed");
return false;
}
try
{
ADOConn.CreateInstance(__uuidof(Connection));
ADOConn->Open("DSN=MMIS;Provider=MSDASQL","sa","bjarne",adConnectUnspecified);
}
catch(_com_error &e)
{
CString err;
err.Format("%s",(char*)(e.Description()));
AfxMessageBox(err);
}
catch(...)
{
AfxMessageBox("Unknown Error...");
}
m_pADOSet.CreateInstance(__uuidof(Recordset)); //初始化ADO记录集

以上就完成了打开数据库的工作了,再添加如下的代码,来设置窗口的名称.
bool XXXApp::ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL)
{
if(ADOSet->State==adStateOpen)
ADOSet->Close();
try
{
ADOSet->Open(strSQL,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,
adCmdUnknown);
return true;
}
catch(_com_error &e)
{
CString err;
err.Format("ADO Error:%s",(char*)e.Description());
AfxMessageBox(err);
return false;
}
}

最后添加关闭数据库连接的函数.一个虚函数,重载系统提供的ExitInstance()函数,如下:
int XXXApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
if(adStateOpen==ADOConn->State)
ADOConn->Close();
if(adStateOpen==m_pADOSet->State)
m_pADOSet->Close();
m_pADOSet.Release();
return CWinApp::ExitInstance();
}

OK对数据库的基本操作就完成了!


=×&D o I p R e E n C g T l X&×=
2006-03-27 17:16
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
像3楼说的那样,在stdAfx.h加入#include&lt;stddb.h&gt;就可以了,然后add class,选CRecordSet。CRecordSet是几乎唯一需要的class。提供了所有MFC的ODBC功能。

http://myajax95./
2006-03-28 10:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-21080-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.400339 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved