哪位高手能帮小弟分析一下啊,要求有流程图及作用,小弟叩谢啦!

llxtjf 2005-09-15 02:45:59
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;

long mSqlCode;
BOOL CHmbAdoDB::Open(LPCSTR lpszConnect)
{
try
{
CREATEiNSTANCE(m_DbConn,Connection);
m_DbConn->Open(lpszConnect,"", "", adModeUnknown );
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}

void CHmbAdoDB::Close()
{
if( IsOpen() )
{
m_DbConn->Close();
}
}

long CHmbAdoDB::BeginTrans()
{
return m_DbConn->BeginTrans();
}

void CHmbAdoDB::CommitTrans()
{
m_DbConn->CommitTrans();
}

void CHmbAdoDB::RollbackTrans()
{
m_DbConn->RollbackTrans();
}

void CHmbAdoDB::Cancel()
{
m_DbConn->Cancel();
}

BOOL CHmbAdoDB::IsOpen()
{
return ( (m_DbConn->GetState() != 0) ? TRUE : FALSE );
}

BOOL CHmbAdoDB::Execute(LPCTSTR lpSQL)
{
if (!IsOpen())
{
AfxMessageBox("Network error, Database do not open.");
return FALSE;
}

CString strSQL(lpSQL);
strSQL.TrimLeft();
strSQL.TrimRight();

try
{
m_DbConn->Execute(_bstr_t(strSQL), NULL, adExecuteNoRecords);
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}

return TRUE;
}

void CHmbAdoDB::ProviderError()
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL;

if( (m_DbConn->Errors->Count) > 0)
{
long nCount = m_DbConn->Errors->Count;

// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = m_DbConn->Errors->GetItem(i);
mSqlCode = pErr->NativeError;
m_ErrMsg.Format("SQLCODE : %ld\t%s",mSqlCode, LPCTSTR(pErr->Description));
m_SQLState.Format("%s",(char*)pErr->SQLState);
printf("%s // %s\n",m_SQLState,m_ErrMsg);
}
}
m_DbConn->Errors->Clear();
}

CHmbAdoDBRs::CHmbAdoDBRs( )
{
}

CHmbAdoDBRs::~CHmbAdoDBRs()
{

}

BOOL CHmbAdoDBRs::Open( CHmbAdoDB *pDB, LPCSTR szSource,long option )
{
CString strSQL;
strSQL = CString(szSource);
strSQL.TrimLeft();
strSQL.TrimRight();
_variant_t vRecsAffected(0L);
// CREATEiNSTANCE( m_Rs,Recordset) ;
// m_Rs->PutRefActiveConnection( pDB->m_DbConn );
try
{
m_Rs = pDB->m_DbConn->Execute(_bstr_t(strSQL),
&vRecsAffected,
adOptionUnspecified);
m_Rs->AddRef();
// m_Rs->Open(szSource, vtMissing, adOpenKeyset, adLockBatchOptimistic, adOptionUnspecified);
// m_Rs->Open(szSource, vtMissing, adOpenKeyset, adLockReadOnly, option);
// m_Rs->Open(szSource,pDB->m_DbConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic, adCmdText);

}
catch( _com_error &e)
{
//ErrorMessage();
m_Rs->Close();
m_Rs->Release();
return FALSE;
}
catch(...)
{
m_Rs->Close();
m_Rs->Release();
return FALSE;
}
return TRUE;
}

void CHmbAdoDBRs::Close()
{
m_Rs->Close();
m_Rs->Release();
}
void CHmbAdoDBRs::GetRs(_variant_t x,_bstr_t &ret)
{
ret = (m_Rs->Fields->Item[x]->Value);
}

void CHmbAdoDBRs::GetRs(_variant_t x,CString &ret)
{
_bstr_t retVal;

try{
retVal = (m_Rs->Fields->Item[x]->Value);
}
catch(...){

ret = "";
return;
}

ret = CString((char*) retVal);
}


BOOL CHmbAdoDBRs::IsEOF()
{
return m_Rs->adoEOF;
}

BOOL CHmbAdoDBRs::IsOpen()
{
return ( (m_Rs->GetState() != 0) ? TRUE : FALSE );
}

BOOL CHmbAdoDBRs::MoveNext() { return (FAILED(m_Rs->MoveNext()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MovePrev() { return (FAILED(m_Rs->MovePrevious()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MoveFirst() { return (FAILED(m_Rs->MoveFirst()) ? FALSE : TRUE ) ; }
BOOL CHmbAdoDBRs::MoveLast() { return (FAILED(m_Rs->MoveLast()) ? FALSE : TRUE ) ; }
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
希望之晨 2005-09-15
  • 打赏
  • 举报
回复
一些数据库的操作,应该不难。不过没接触过,帮你顶下。
doway 2005-09-15
  • 打赏
  • 举报
回复

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧