www.pudn.com > duanxinfangwei.rar > DbInterface.cpp
// DbInterface.cpp: implementation of the CDbInterface class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "smspreventforgery.h"
#include "DbInterface.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDbInterface::CDbInterface()
{
::CoInitialize(NULL);
/* ACCESS数据库 */
char szFileName[256];
GetModuleFileName(NULL,szFileName,256);
char szDrive[256]={0};
char szDir[256]={0};
char szPath[256]={0};
_tsplitpath(szFileName,szDrive,szDir,NULL,NULL);
sprintf(szPath,"%s%s",szDrive,szDir);
DATASOURCE.Format(DATASOURCE_ACCESS, szPath);
}
CDbInterface::~CDbInterface()
{
}
/**********************************************************************
* 函数名: AppendNewProduct
* 功 能: 追加新的产品
* 参 数: CString 产品名
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::AppendNewProduct(CString productName)
{
_ConnectionPtr pConnection;
_variant_t RecordsAffected; //影响行数
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
/* 取得当前时间 */
CTime currentTime = CTime::GetCurrentTime();
CString strCurrentTime = currentTime.Format("%Y-%m-%d %H:%M:%S");
try
{
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
SQL.Format("INSERT INTO smspre_product(productName, entertime) VALUES(\'%s\', \'%s\')",
productName, strCurrentTime);
pConnection->Execute((_bstr_t)SQL, &RecordsAffected, adCmdText);
bRet = true;
}
catch(_com_error e)
{
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: CheckProduct
* 功 能: 检查产品是否已存在
* 参 数: CString 产品名
* : bool & 存在标志
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::CheckProduct(CString productName, bool &existFlag)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_product WHERE productName = \'%s\'", productName);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(pRecordset->adoEOF && pRecordset->BOF)
{
existFlag = false;
}
else
{
existFlag = true;
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetProductList
* 功 能: 取得产品列表
* 参 数: std::list & 产品列表
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetProductList(std::list &productList)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_product ORDER BY productId DESC");
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
productList.clear();
while(!pRecordset->adoEOF)
{
PRODUCTINFO productInfo;
//取得产品ID
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productId = var.iVal;
}
//取得产品名称
pRecordset->get_Collect(_variant_t("productName"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productName = (LPCSTR)_bstr_t(var);
}
//取得进入日期
pRecordset->get_Collect(_variant_t("entertime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.entertime = (LPCSTR)_bstr_t(var);
}
productList.push_back(productInfo);
//称动指针
pRecordset->MoveNext();
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetProductInfo
* 功 能: 取得产品信息
* 参 数: CString 产品名
* : PRODUCTINFO & 产品信息
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetProductInfo(CString productName, PRODUCTINFO &productInfo)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_product WHERE productName = \'%s\'", productName);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(!pRecordset->adoEOF)
{
//取得产品ID
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productId = var.iVal;
}
//取得产品名称
pRecordset->get_Collect(_variant_t("productName"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productName = (LPCSTR)_bstr_t(var);
}
//取得进入日期
pRecordset->get_Collect(_variant_t("entertime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.entertime = (LPCSTR)_bstr_t(var);
}
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: CheckCodeExist
* 功 能: 检查防伪号是否存在
* 参 数: CString 防伪号
* : bool & 存在标志
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::CheckCodeExist(CString code, bool &existflag)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_codelist WHERE code = \'%s\'", code);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(pRecordset->adoEOF && pRecordset->BOF)
{
existflag = false;
}
else
{
existflag = true;
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: AppendNewCode
* 功 能: 追加新的防伪号
* 参 数: CODEINFO 防伪信息
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::AppendNewCode(CODEINFO codeinfo)
{
_ConnectionPtr pConnection;
_variant_t RecordsAffected; //影响行数
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
try
{
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
SQL.Format("INSERT INTO smspre_codelist(code, querytimes, productId, outflag, stateflag, gentime) VALUES(\'%s\', %d, %d, %d, %d, \'%s\')",
codeinfo.code, codeinfo.querytimes, codeinfo.productId, codeinfo.outflag, codeinfo.stateflag, codeinfo.gentime);
pConnection->Execute((_bstr_t)SQL, &RecordsAffected, adCmdText);
bRet = true;
}
catch(_com_error e)
{
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: UpdateCodeQueryTimes
* 功 能: 更新防伪号查询次数(加1)
* 参 数: CString 防伪号
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::UpdateCodeQueryTimes(CString code)
{
_ConnectionPtr pConnection;
_variant_t RecordsAffected; //影响行数
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
try
{
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
SQL.Format("UPDATE smspre_codelist SET querytimes = querytimes + 1 WHERE code = \'%s\'",
code);
pConnection->Execute((_bstr_t)SQL, &RecordsAffected, adCmdText);
bRet = true;
}
catch(_com_error e)
{
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetCodeInfo
* 功 能: 取得防伪号信息
* 参 数: CODEINFO & 防伪号信息
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetCodeInfo(CODEINFO &codeinfo)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
if(codeinfo.code.IsEmpty())
{
return false;
}
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_codelist WHERE code = \'%s\'", codeinfo.code);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(!pRecordset->adoEOF)
{
//查询次数
pRecordset->get_Collect(_variant_t("querytimes"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.querytimes = var.iVal;
}
//产品ID
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.productId = var.iVal;
}
//出厂标志
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.productId = var.iVal;
}
//号码状态
pRecordset->get_Collect(_variant_t("stateflag"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.stateflag = var.iVal;
}
//生成批号
pRecordset->get_Collect(_variant_t("gentime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.gentime = (LPCSTR)_bstr_t(var);
}
}
else
{
codeinfo.querytimes = -1;
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: AppendQueryRec
* 功 能: 追加查询流水记录
* 参 数: QUERYREC 查询记录信息
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::AppendQueryRec(QUERYREC queryrec)
{
_ConnectionPtr pConnection;
_variant_t RecordsAffected; //影响行数
CString SQL;
bool bRet;
try
{
pConnection.CreateInstance(__uuidof(Connection));
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
SQL.Format("INSERT INTO smspre_queryrec(queryer, querytime, queryinfo, dspFlag) VALUES(\'%s\', \'%s\', \'%s\', %ld)",
queryrec.queryer, queryrec.querytime, queryrec.queryinfo, UNDSP);
pConnection->Execute((_bstr_t)SQL, &RecordsAffected, adCmdText);
bRet = true;
}
catch(_com_error e)
{
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetQueryRecList
* 功 能: 取得查询记录
* 参 数: std::list& 查询记录信息列表
* : int 查询条件
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetQueryRecList(std::list& queryRecList,
int dspConditon)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_queryrec WHERE dspFlag = %d ORDER BY querytime ASC", dspConditon);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
queryRecList.clear();
while(!pRecordset->adoEOF)
{
QUERYREC queryRec;
//取得查询者
pRecordset->get_Collect(_variant_t("queryer"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
queryRec.queryer = (LPCSTR)_bstr_t(var);
}
//取得查询时间
pRecordset->get_Collect(_variant_t("querytime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
queryRec.querytime = (LPCSTR)_bstr_t(var);
}
//取得查询的防伪号
pRecordset->get_Collect(_variant_t("queryinfo"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
queryRec.queryinfo = (LPCSTR)_bstr_t(var);
}
//取得显示标志
pRecordset->get_Collect(_variant_t("dspFlag"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
queryRec.dspFlag = var.iVal;
}
queryRecList.push_back(queryRec);
/* 更新状态 */
if(dspConditon == UNDSP)
{
pRecordset->put_Collect(_variant_t("dspFlag"), _variant_t("1"));
pRecordset->Update();
}
//称动指针
pRecordset->MoveNext();
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetCodeList
* 功 能: 取得防伪号列表
* 参 数: CString 查询SQL
* : std::list & 结果列表
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetCodeList(CString sql,
std::list &codeinfolist)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("%s", sql);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
codeinfolist.clear();
while(!pRecordset->adoEOF)
{
CODEINFO codeinfo;
//取得防伪码
pRecordset->get_Collect(_variant_t("code"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.code = (LPCSTR)_bstr_t(var);
}
//取得查询次数
pRecordset->get_Collect(_variant_t("querytimes"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.querytimes = var.iVal;
}
//取得产品ID
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.productId = var.iVal;
}
//取得出厂标志
pRecordset->get_Collect(_variant_t("outflag"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.outflag = var.iVal;
}
//取得号码状态
pRecordset->get_Collect(_variant_t("stateflag"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.stateflag = var.iVal;
}
//取得生成批号
pRecordset->get_Collect(_variant_t("gentime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
codeinfo.gentime = (LPCSTR)_bstr_t(var);
}
codeinfolist.push_back(codeinfo);
//移动指针
pRecordset->MoveNext();
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetQueryedCodeList
* 功 能: 取得已查询过的号码列表
* 参 数: std::list & 结果列表
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetQueryedCodeList(std::list &codeinfolist)
{
CString sql;
sql.Format("SELECT * FROM smspre_codelist WHERE querytimes > 0 AND stateflag = %d",
OKCODE);
return GetCodeList(sql, codeinfolist);
}
/**********************************************************************
* 函数名: GetProductInfo
* 功 能: 取得产品信息
* 参 数: int 产品ID
* : PRODUCTINFO & 产品信息
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetProductInfo(int productId, PRODUCTINFO &productInfo)
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_variant_t RecordsAffected; //影响行数
_variant_t var;
CString SQL;
bool bRet;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
bRet = true;
try
{
SQL.Format("SELECT * FROM smspre_product WHERE productId = %d", productId);
pConnection->Open((_bstr_t)DATASOURCE, DATAUSER, DATAPWD, adModeUnknown);
pRecordset->Open((_variant_t)SQL,
pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(!pRecordset->adoEOF)
{
//取得产品ID
pRecordset->get_Collect(_variant_t("productId"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productId = var.iVal;
}
//取得产品名称
pRecordset->get_Collect(_variant_t("productName"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.productName = (LPCSTR)_bstr_t(var);
}
//取得进入日期
pRecordset->get_Collect(_variant_t("entertime"), (_variant_t*)(&var));
if(var.vt != VT_NULL)
{
productInfo.entertime = (LPCSTR)_bstr_t(var);
}
}
pRecordset->Close();
}
catch(_com_error e)
{
/* 加入写LOG文件相关代码 */
bRet = false;
}
catch(...)
{
bRet = false;
}
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
return bRet;
}
/**********************************************************************
* 函数名: GetQueryedMulCodeList
* 功 能: 取得多次查询过的号码列表
* 参 数: std::list & 结果列表
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetQueryedMulCodeList(std::list &codeinfolist)
{
CString sql;
sql.Format("SELECT * FROM smspre_codelist WHERE querytimes > 1 AND stateflag = %d",
OKCODE);
return GetCodeList(sql, codeinfolist);
}
/**********************************************************************
* 函数名: GetQueryedMulCodeList
* 功 能: 取得假冒号码列表
* 参 数: std::list & 结果列表
* 返回值: bool true 成功
* false 失败
*********************************************************************/
bool CDbInterface::GetInvalidationCodeList(std::list &codeinfolist)
{
CString sql;
sql.Format("SELECT * FROM smspre_codelist WHERE stateflag = %d",
NGCODE);
return GetCodeList(sql, codeinfolist);
}