📄 niaccessctdb.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 + -