articleset.cpp

来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C++ 代码 · 共 157 行

CPP
157
字号
// ArticleSet.cpp : implementation file
//

#include "stdafx.h"
#include "ArticleSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CArticleSet

IMPLEMENT_DYNAMIC(CArticleSet, CRecordset)

CArticleSet::CArticleSet(CDatabase* pdb)
	: CRecordset(/*pdb*/NULL == pdb ? CDB::GetDefaultDB() : pdb)
{//pdb为NULL,自动连接默认库
	//{{AFX_FIELD_INIT(CArticleSet)
	m_content = _T("");
	m_forumid = 0;
	m_topic = _T("");
	m_FileName = _T("");
	m_ArticleID = 0;
	m_nFields = 5;
	//}}AFX_FIELD_INIT
	m_nDefaultType = snapshot;
}


CString CArticleSet::GetDefaultConnect()
{
	ASSERT(false);//不会被调用,因为重载了构造函数	
	//return _T("ODBC;DSN=community");
	return _T("ODBC;DSN=" + CDB::m_strDsn);
}

CString CArticleSet::GetDefaultSQL()
{
	return _T("[Article]");
}

void CArticleSet::DoFieldExchange(CFieldExchange* pFX)
{
	//{{AFX_FIELD_MAP(CArticleSet)
	pFX->SetFieldType(CFieldExchange::outputColumn);
	RFX_Text(pFX, _T("[content]"), m_content,1000000);
	RFX_Long(pFX, _T("[forumid]"), m_forumid);
	RFX_Text(pFX, _T("[topic]"), m_topic);
	RFX_Text(pFX, _T("[FileName]"), m_FileName);
	RFX_Long(pFX, _T("[ArticleID]"), m_ArticleID);
	//}}AFX_FIELD_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CArticleSet diagnostics

#ifdef _DEBUG
void CArticleSet::AssertValid() const
{
	CRecordset::AssertValid();
}

void CArticleSet::Dump(CDumpContext& dc) const
{
	CRecordset::Dump(dc);
}
#endif //_DEBUG


//=======================================================//
//           静态成员函数                                //
//=======================================================//

//因为sql语句无法返回自动生成的ID,所以只有CArticleSet的一般成员函数实现
bool CArticleSet::AddArticle(CString strTopic, const CString &strContent, int nForumid, CString strFileName, long &nID)
{
	CArticleSet rs(CDB::GetDefaultDB());
	try
	{
		rs.Open(CRecordset::dynaset);
		rs.AddNew();
		rs.m_topic		= strTopic ;
		rs.m_content	= strContent ;
		rs.m_forumid	= nForumid ;
		rs.m_FileName	= strFileName ;
		rs.Update();
		rs.MoveLast();//用update没有刷新,无法得到id的值
		nID = rs.m_ArticleID ;
	}
	catch(CDBException * e)
	{
		ASSERT(false);
		e->m_strError;
		return false;
	}

	return true ;
}

bool CArticleSet::DeleteArticle(long nID)
{
	//取得默认数据库
	CDatabase * pDatabase = CDB::GetDefaultDB() ;
	if(NULL == pDatabase || !pDatabase->IsOpen())
	{
		ASSERT(false);
		return false;
	}
	
	//执行sql语句
	CString strSQL;
	strSQL.Format("delete * from  Article where ArticleID= %d",nID);
	try
	{
		pDatabase->ExecuteSQL(strSQL);
	}
	catch(CDBException* e)
	{
		ASSERT(false);
		e->m_strError;
		return false;
	}
	
	return true;
}

bool CArticleSet::EditArticle(long nID, CString strTopic, const CString &strContent, int nForumid, CString strFileName)
{
	//取得默认数据库
	CDatabase * pDatabase = CDB::GetDefaultDB() ;
	if(NULL == pDatabase || !pDatabase->IsOpen())
	{
		ASSERT(false);
		return false;
	}
	
	//执行sql语句
	CString strSQL;
	strSQL.Format("update Article set topic=\'%s\',content=\'%s\',forumid=%d,FileName=\'%s\' WHERE ArticleID=%d",strTopic,strContent,nForumid,strFileName,nID);
	try
	{
		pDatabase->ExecuteSQL(strSQL);
	}
	catch(CDBException* e)
	{
		int nLength = strSQL.GetLength();
		ASSERT(false);
		AfxMessageBox(e->m_strError);
		return false;
	}
	
	return true;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?