⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 niaccessctdb.cpp

📁 本动态库主要为了根据对数据源操作使用SQL语句了直接嵌入VC过程来实现,可以用在很多数据库种类的基本操作,实现了简单的SQL在外部调用动态库尔嵌入.数据库框架的设计不会影像本动态库的使用.
💻 CPP
字号:
// NIAccessCTDB.cpp: implementation of the NIAccessCTDB class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NIAccessCTDB.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

NIAccessCTDB::NIAccessCTDB()
{

}

NIAccessCTDB::~NIAccessCTDB()
{

}


//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::OpenDB
// 功能描述 : 根据数据库路径打开数据库
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : BOOL  
//          
// 参    数 : [in] CString strDBPath
//          
BOOL  NIAccessCTDB::OpenDB(CString strDBPath)
{
	m_pDb=new CADODatabase;
	strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='%s'",strDBPath);
	if(m_pDb->Open(strConnection))
	{	
		 return TRUE;
	}
	else
	{
		AfxMessageBox(m_pDb->GetLastErrorString());
		DWORD dwError = m_pDb->GetLastError();
		return FALSE;
	}
}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::CloseDB
// 功能描述 : 关闭打开的数据库
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : VOID  
//          
VOID  NIAccessCTDB::CloseDB()
{
	if(m_pDb->IsOpen())
	{
		m_pDb->Close();
		delete m_pDb;
	}

}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::GetDB
// 功能描述 : 返回打开的数据库
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : CADODatabase* 
//          
CADODatabase* NIAccessCTDB::GetDB()
{
	return m_pDb;
}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::LoadRecord
// 功能描述 : 由字段链表fp,字段所在表名、查询条件语句得到所有记录链表结构result;
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : INT 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strTblAndCondition
//          
// 参    数 : [in] RESULT& result
//          
INT NIAccessCTDB::LoadRecord(CADODatabase* pDB,const FIELDPARAM& fp,CString strTblAndCondition,RESULT& result)
{
	
	int nFieldSize = fp.size();	// 查询字段数目

	CString strFields;
	
	for(int i=0; i<nFieldSize-1; i++)
		strFields = strFields + fp[i] + ",";
	
	strFields="select "+strFields+fp[nFieldSize-1]+" ";

	// 生成查询语句
	string strSQL = strFields + strTblAndCondition;
	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL.c_str(),CADORecordset::openQuery);
		
		if(pRS->GetRecordCount()>0)
			pRS->MoveFirst();

		while(!pRS->IsEOF())
		{
			RECORDSET* pRecord = new RECORDSET;  //存储字段
			for(int i=0; i<nFieldSize; i++)
			{
				_variant_t v;			
				if(pRS->IsFieldNull(i))
				{
					v=(_bstr_t)" ";
				}
				else
					pRS->GetFieldValue(fp[i], v);
						
				pRecord->push_back(v);
			}
			result.push_back(pRecord);
			pRS->MoveNext();
		}
		delete pRS;
	}
	catch(CDBException& err)
	{
		HandleError(err);
	}
	return result.size();

}


//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::DeleteRecord
// 功能描述 : 根据表名、查询语句删除记录
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : BOOL 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] CString strTblAndCondition
//          
BOOL NIAccessCTDB::DeleteRecord(CADODatabase* pDB,CString strTblAndCondition)
{
	CString strSQL = "delete * " + strTblAndCondition;
	pDB->Execute(strSQL);
	return 0;

}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::ModifyRecord
// 功能描述 : 根据要修改的字段链表结构fp,有修改的表名、查询语句修改数据库
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : BOOL 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strTblAndCondition
//          
// 参    数 : [in] RECORDSET& result
//          
BOOL NIAccessCTDB::ModifyRecord(CADODatabase* pDB,const FIELDPARAM& fp,CString strTblAndCondition,RECORDSET& result)
{
	int nFieldSize = fp.size();	// 查询字段数目
    string strSQL = "select *" + strTblAndCondition;

	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL.c_str(),CADORecordset::openQuery);
		if(pRS->GetRecordCount()<=0)
		return -1;

		while(!pRS->IsEOF())
		{
			RECORDSET* pRecord = new RECORDSET;  //存储字段
			pRS->Edit();
			for(int i=0; i<nFieldSize; i++)
			{
				CString strFldName=fp[i];
				_variant_t vtFld=result[i];
				switch(vtFld.vt)
				{
				case VT_I4:
					pRS->SetFieldValue(strFldName, vtFld.iVal);
					break;
				case VT_BOOL:
					pRS->SetFieldValue(strFldName, vtFld.bVal);
					break;
				default:
					pRS->SetFieldValue(strFldName, vtFld);
				}
				
			}
			pRS->Update();
			pRS->MoveNext();
		}
		delete pRS;

	}
	catch(CDBException& err)
	{
		HandleError(err);
		
	}


	return true;
}


//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::AddRecord
// 功能描述 : 根据要添加的字段链表结构fp,表名、查询语句在数据库添加纪录
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : BOOL 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strTblAndCondition
//          
// 参    数 : [in] RECORDSET& result
//          
BOOL NIAccessCTDB::AddRecord(CADODatabase* pDB,const FIELDPARAM& fp,CString strTblAndCondition,RECORDSET& result)
{
	int nFieldSize = fp.size();	// 查询字段数目

	CString strFields;
	
	for(int i=0; i<nFieldSize-1; i++)
		strFields = strFields + fp[i] + ",";
	
	strFields="select * " ;
	string strSQL = strFields + strTblAndCondition;	// 生成查询语句


	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL.c_str(),CADORecordset::openQuery);
	
		RECORDSET* pRecord = new RECORDSET;  //存储字段
		pRS->AddNew();
		for(i=0; i<nFieldSize; i++)
		{
			//pRS->SetFieldValue(fp[i], result[i]);
			CString strFldName=fp[i];
			_variant_t vtFld=result[i];
			switch(vtFld.vt)
			{
			case VT_I4:
				pRS->SetFieldValue(strFldName, vtFld.iVal);
				break;
			case VT_BOOL:
				pRS->SetFieldValue(strFldName, vtFld.boolVal);
				break;
			default:
				pRS->SetFieldValue(strFldName, vtFld);
			}
		}
		pRS->Update();
		pRS->Close();
		delete pRS;
	}
	catch(CDBException& err)
	{
		HandleError(err);
		
	}
	return true;
}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::AddAutoIDRecord
// 功能描述 : 根据要添加的字段链表结构fp,表名、查询语句在数据库添加纪录,返回数据库中ID字段值
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : LONG 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strTblAndCondition
//          
// 参    数 : [in] CString ID
//          
// 参    数 : [in] RECORDSET& result
//          
_variant_t NIAccessCTDB::AddAutoIDRecord(CADODatabase* pDB,const FIELDPARAM& fp,CString strTblAndCondition,CString ID,RECORDSET& result)
{
	_variant_t IDValue;

	int nFieldSize = fp.size();	// 查询字段数目

	CString strFields;
	
	for(int i=0; i<nFieldSize-1; i++)
		strFields = strFields + fp[i] + ",";
	
	strFields="select * " ;
	string strSQL = strFields + strTblAndCondition;	// 生成查询语句


	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL.c_str(),CADORecordset::openQuery);
	
		RECORDSET* pRecord = new RECORDSET;  //存储字段
		pRS->AddNew();
	
		for(i=0; i<nFieldSize; i++)
		{
		
			CString strFldName=fp[i];
			_variant_t vtFld=result[i];
			switch(vtFld.vt)
			{
			case VT_R4:
			case VT_I4:
				pRS->SetFieldValue(strFldName, vtFld.iVal);
				break;
			case VT_BOOL:
				pRS->SetFieldValue(strFldName, vtFld.boolVal);
				break;
			case VT_DATE:
				pRS->SetFieldValue(strFldName, vtFld.date);
				break;
			default:
				pRS->SetFieldValue(strFldName, vtFld);
			}
		}
	
		pRS->Update();
		if(ID=="")
		{
			pRS->Close();
			return "NULL";

		}
		pRS->GetFieldValue(ID,IDValue);
		pRS->Close();
		delete pRS;

	}
	catch(CDBException& err)
	{
		HandleError(err);
		return "";
	}
	return IDValue;
}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::Query
// 功能描述 : 根据要查询的字段链表结构fp,表名、查询语句在数据库中查询,结果置于result结构;
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : INT 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strTblAndCondition
//          
// 参    数 : [in] RESULT& result
//          
INT NIAccessCTDB::Query(CADODatabase* pDB,const FIELDPARAM& fp,CString strTblAndCondition,RESULT& result)
{
	
	int nFieldSize = fp.size();	// 查询字段数目

	CString strFields;
	
	for(int i=0; i<nFieldSize-1; i++)
		strFields = strFields + fp[i] + ",";
	
	strFields="select "+strFields+fp[nFieldSize-1]+" ";

	// 生成查询语句
	string strSQL = strFields + strTblAndCondition;
	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL.c_str(),CADORecordset::openQuery);
		
		if(pRS->GetRecordCount()>0)
			pRS->MoveFirst();

		while(!pRS->IsEOF())
		{
			RECORDSET* pRecord = new RECORDSET;  //存储字段
			for(int i=0; i<nFieldSize; i++)
			{
				_variant_t v;
				pRS->GetFieldValue(fp[i], v);
				pRecord->push_back(v);
			}
			result.push_back(pRecord);
			pRS->MoveNext();
		}
		delete pRS;

	}
	catch(CDBException& err)
	{
		HandleError(err);
	}

	return result.size();

}


//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::HandleError
// 功能描述 : 捕获句柄错误
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : VOID 
//          
// 参    数 : [in] CDBException& err
//          
VOID NIAccessCTDB::HandleError(CDBException& err)
{
  
	CString szErr = err.m_strError;

	#ifdef _DEBUG
		err.ReportError();
	#endif 
}

//////////////////////////////////////////////////////////////////
// 文    件 : NIAccessCTDB.cpp
// 函 数 名 : NIAccessCTDB::RecursionQuery
// 功能描述 : 
// 作    者 : 张 璟
// 电子邮件 : zhang-jing@neusoft.com
// 修改记录 : 
// 日    期 : 2002-7-23
//----------------------------------------------------------------
// 调 用 者 : 
// 返 回 值 : INT 
//          
// 参    数 : [in] CADODatabase* pDB
//          
// 参    数 : [in] const FIELDPARAM& fp
//          
// 参    数 : [in] CString strSQL
//          
// 参    数 : [in] RESULT& result
//          
INT NIAccessCTDB::RecursionQuery(CADODatabase* pDB,const FIELDPARAM& fp,CString strSQL,RESULT& result)
{
	return Query(pDB, fp, strSQL, result);
}
_variant_t NIAccessCTDB::GetFieldValue(CADODatabase* pDB,CString strFieldName,CString strSqlList)
{

	_variant_t v;
	CString strSQL = "SELECT " + strFieldName + strSqlList;
	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL,CADORecordset::openQuery);
		
		if(pRS->GetRecordCount()>0)
			pRS->MoveFirst();

		while(!pRS->IsEOF())
		{
			pRS->GetFieldValue(strFieldName, v);
			pRS->MoveNext();
		}
		delete pRS;

	}

	catch(CDBException& err)
	{
		HandleError(err);
	}

	return v;
}

INT NIAccessCTDB::GetRecordCount(CADODatabase* pDB,CString strSQL)
{
	int iCount=0;
	try{
		CADORecordset* pRS = new CADORecordset(pDB);
		pRS->Open(strSQL,CADORecordset::openQuery);
		
		iCount=pRS->GetRecordCount();
	
		delete pRS;
		
	}
	catch(CDBException& err)
	{
		HandleError(err);
	}

	return iCount;

}

⌨️ 快捷键说明

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