与CCeDBDatabase类数据库相比,CeCreateDatabaseEx具有独特的优势,其创建路径可以指定的特性决定了其数据可以永久保存的 固有优势,但相比CCeDBDatabase类数据库而言,CeCreateDatabaseEx完全应用api函数操作,其操作也相对复杂一些。 Records允许的9种数据类型:
数据类型 描述IVal
2-byte signed integer
UiVal
2-byte unsigned integer
LVal
4-byte signed integer
UlVal
4-byte unsigned integer
FILETIME
A time and date structure
LPWSTR
0-terminated Unicode string
CEBLOB
A collection of bytes
BOOL
BooleanDouble
8-byte signed value
虽然CeCreateDatabaseEx由于直接操作api函数而使得其相对复杂,但将其封装后最终的用户就不会觉察,其下是我在使用过程中封装的几个类,仅供参考: // InfoIndexYCBase.h: interface for the CInfoIndexYCBase class. // //#if !defined(AFX_INFOINDEXYCBASE_H__4AC91339_5B2C_4BF0_A721_5E97AD849B2C__INCLUDED_) #define AFX_INFOINDEXYCBASE_H__4AC91339_5B2C_4BF0_A721_5E97AD849B2C__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
class CInfoIndexYCBase { public: CInfoIndexYCBase(); virtual ~CInfoIndexYCBase();
public: CString ViewParam(void); //查看结构体内容
protected: enum{YCCOUNT = 13, STANDBYCOUNT = 10}; //YCCOUNT代表遥测量个数、STANDBYCOUNT代表备用参数个数
public: //设置、获取No void SetNo(const CString &strNo); const CString GetNo(void)const;
//设置、获取SNo void SetSNo(const CString &strSNo); const CString GetSNo(void)const;
//设置、获取一次、二次标志 //TRUE为一次、FALSE为二次 void SetTransFlag(const BOOL &bTransFlag); const BOOL GetTransFlag(void)const;
//设置、获取PT一次(不取float类型是因为含有单位) void SetPT1(const CString &strPT1); const CString GetPT1(void)const;
//设置、获取PT二次 void SetPT2(const CString &strPT2); const CString GetPT2(void)const;
//设置、获取CT一次 void SetCT1(const CString &strCT1); const CString GetCT1(void)const;
//设置、获取CT二次 void SetCT2(const CString &strCT2); const CString GetCT2(void)const;
//设置、获取遥测量选择标志 void SetYCSelectFlag(const BOOL *pbYCSelect, const int &nYCCount = YCCOUNT); void GetYCSelectFlag(BOOL *pbYCSelect, const int &nYCCount = YCCOUNT);
//设置、获取协议类型 void SetProtocolID(const int &nProtocolID); const int GetProtocolID(void)const;
//设置、获取点表配置步骤索引 void SetIndexConfigStep(const int &nIndexConfigStep); const int GetIndexConfigStep(void)const;
//设置、获取遥测量标识码有效标志 void SetMarkEffectFlag(const BOOL *pbMarkEffectFlag, const int &nStandbyCount = STANDBYCOUNT); void GetMarkEffectFlag(BOOL *pbMarkEffectFlag, const int &nStandbyCount = STANDBYCOUNT);
//设置、获取是否已配置详细信息标志 void SetHaveDetailInfoFlag(const BOOL &bHaveDetailInfoFlag); BOOL GetHaveDetailInfoFlag(void);
//设置、获取遥测量索引有效标志 void SetYCIndexEffectFlag(const BOOL *pbYCIndexEffectFlag, const int &nYCCount = YCCOUNT); void GetYCIndexEffectFlag(BOOL *pbYCIndexEffectFlag, const int &nYCCount = YCCOUNT);
//设置、获取遥测量算法 void SetYCArith(const int *pnYCArith, const int &nYCCount = YCCOUNT); void GetYCArith(int *pnYCArith, const int &nYCCount = YCCOUNT);
//设置、获取系数K void SetCoefficientK(const float *pfCoefficientK, const int &nYCCount = YCCOUNT); void GetCoefficientK(float *pfCoefficientK, const int &nYCCount = YCCOUNT);
//设置、获取系数B void SetCoefficientB(const float *pfCoefficientB, const int &nYCCount = YCCOUNT); void GetCoefficientB(float *pfCoefficientB, const int &nYCCount = YCCOUNT);
protected: void NewPropVal(CEPROPVAL *prgPropVal, const int &nStartIndex, int &nIndex); void PropValToRecord(CEPROPVAL *prgPropVal, int &nIndex); void DeletePropVal(void);
protected: //将数组转换为指定格式(Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F) CString FormatDataToSpecialStr(const int *pnData, const int &nYCCount = YCCOUNT); CString FormatDataToSpecialStr(const float *pfData, const int &nYCCount = YCCOUNT);
//将指定格式的字符串分离成数组 void DetachDataFromSpecialStr(const CString &strData, int *pnData, const int &nYCCount = YCCOUNT); void DetachDataFromSpecialStr(const CString &strData, float *pfData, const int &nYCCount = YCCOUNT);
//赋值,为子类重载 = 做准备 void Evaluate(const CInfoIndexYCBase &infoIndexBase);
protected: CString m_strNo; //No CString m_strSNo; //SNo
CString m_strTransFlag; //一次、二次标志。0为二次、1为一次 CString m_strPT1; //PT一次 CString m_strPT2; //PT二次 CString m_strCT1; //CT一次 CString m_strCT2; //CT二次
//遥测量选择标志 //其格式为:Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F //选中为1、否则为0 CString m_strYCSelectFlag;
CString m_strProtocolID; //协议类型:-1代表未配、0代表Finally、1代表Other、2代表CDT、3代表101、4代表103、5代表104 CString m_strIndexConfigStep; //点表信息配置步骤索引:-1代表未配、0代表已配置基本信息、1代表已配置详细信息
CString m_strMarkEffectFlag; //遥测标识码有效标志,0为无效、1为有效 CString m_strHaveDetailInfoFlag; //是否已配置详细信息标志 CString m_strYCIndexEffectFlag; //遥测索引有效标志,针对每一个遥测量是否配置索引。0为无效、1为有效
CString m_strYCArith; //遥测量算法,其格式为:Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F,未配置为-1 CString m_strCoefficientK; //系数K,其格式为:Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F CString m_strCoefficientB; //系数B,其格式为:Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F };
#endif // !defined(AFX_INFOINDEXYCBASE_H__4AC91339_5B2C_4BF0_A721_5E97AD849B2C__INCLUDED_) // InfoIndexYCBase.cpp: implementation of the CInfoIndexYCBase class. // //
#include "stdafx.h" #include "InfoIndexYCBase.h"
// // Construction/Destruction //
CInfoIndexYCBase::CInfoIndexYCBase() { m_strNo = _T(""); //No m_strSNo = _T(""); //SNo
m_strTransFlag = _T(""); //一次、二次标志。0为二次、1为一次 m_strPT1 = _T(""); //PT一次 m_strPT2 = _T(""); //PT二次 m_strCT1 = _T(""); //CT一次 m_strCT2 = _T(""); //CT二次 m_strYCSelectFlag = _T("-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1"); //遥测量选择标志
m_strProtocolID = _T("-1"); //协议类型:-1代表未配、0代表Finally、1代表Other、2代表CDT、3代表101、4代表103、5代表104 m_strIndexConfigStep = _T("-1"); //点表信息配置步骤索引:-1代表未配、0代表已配置基本信息、1代表已配置详细信息
m_strMarkEffectFlag = _T("0|0|0|0|0|0|0|0|0|0"); //遥测量标识码有效位 m_strHaveDetailInfoFlag = _T("0"); //是否已配置详细信息标志 m_strYCIndexEffectFlag = _T("0|0|0|0|0|0|0|0|0|0|0|0|0");; //遥测索引有效标志,0为无效、1为有效
m_strYCArith = _T("-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1"); //遥测量算法,格式如上 m_strCoefficientK = _T("0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0"); m_strCoefficientB = _T("0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0"); }
CInfoIndexYCBase::~CInfoIndexYCBase() {
}
//查看结构体内容 CString CInfoIndexYCBase::ViewParam() { CString str; str = _T("No: ") + m_strNo + _T("/n"); str += _T("SNo: ") + m_strSNo + _T("/n"); str += _T("一次、二次标志: ") + m_strTransFlag + _T("/n"); str += _T("PT一次: ") + m_strPT1 + _T("/t"); str += _T("PT二次: ") + m_strPT2 + _T("/n"); str += _T("CT一次: ") + m_strCT1 + _T("/t"); str += _T("CT二次: ") + m_strCT2 + _T("/n"); str += _T("遥测量选择标志: ") + m_strYCSelectFlag + _T("/n"); str += _T("协议类型: ") + m_strProtocolID + _T("/n"); str += _T("点表信息配置步骤索引: ") + m_strIndexConfigStep + _T("/n"); str += _T("遥测标识码有效标志: ") + m_strMarkEffectFlag + _T("/n"); str += _T("是否已配置详细信息标志: ") + m_strHaveDetailInfoFlag + _T("/n"); str += _T("遥测索引有效标志: ") + m_strYCIndexEffectFlag + _T("/n"); str += _T("遥测量算法: ") + m_strYCArith + _T("/n"); str += _T("系数K: ") + m_strCoefficientK + _T("/n"); str += _T("系数B: ") + m_strCoefficientB + _T("/n/n");
return str; }
//将数组转换为指定格式(Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F) CString CInfoIndexYCBase::FormatDataToSpecialStr(const int *pnData, const int &nYCCount) { ASSERT(nYCCount > 0);
CString str(_T("")), str1(_T("")); str.Format(_T("%d"), pnData[0]); for(register int i = 1; i < nYCCount; i++) { str1.Format(_T("|%d"), pnData[i]); str += str1; }
return str; }
CString CInfoIndexYCBase::FormatDataToSpecialStr(const float *pfData, const int &nYCCount) { ASSERT(nYCCount > 0);
CString str(_T("")), str1(_T("")); str.Format(_T("%f"), pfData[0]); for(register int i = 1; i < nYCCount; i++) { str1.Format(_T("|%f"), pfData[i]); str += str1; }
return str; }
//将指定格式的字符串分离成数组 void CInfoIndexYCBase::DetachDataFromSpecialStr(const CString &strData, int *pnData, const int &nYCCount) { ASSERT(nYCCount > 0);
CString strTemp(strData), str; for(register int i = 0; i < nYCCount; i++) { str = strTemp;
if(str.Find(_T("|"), 0) != -1) { str.Delete(strTemp.Find(_T("|"), 0), strTemp.GetLength() - strTemp.Find(_T("|"), 0));
strTemp.Delete(0, strTemp.Find(_T("|"), 0) + 1); }
swscanf(str, _T("%d"), &pnData[i]); } }
void CInfoIndexYCBase::DetachDataFromSpecialStr(const CString &strData, float *pfData, const int &nYCCount) { ASSERT(nYCCount > 0);
CString strTemp(strData), str; for(register int i = 0; i < nYCCount; i++) { str = strTemp;
if(str.Find(_T("|"), 0) != -1) { str.Delete(strTemp.Find(_T("|"), 0), strTemp.GetLength() - strTemp.Find(_T("|"), 0));
strTemp.Delete(0, strTemp.Find(_T("|"), 0) + 1); }
swscanf(str, _T("%f"), &pfData[i]); } }
//设置、获取No void CInfoIndexYCBase::SetNo(const CString &strNo) { m_strNo = strNo; }
const CString CInfoIndexYCBase::GetNo()const { return m_strNo; }
//设置、获取SNo void CInfoIndexYCBase::SetSNo(const CString &strSNo) { m_strSNo = strSNo; }
const CString CInfoIndexYCBase::GetSNo()const { return m_strSNo; }
//设置、获取一次、二次标志 //TRUE为一次、FALSE为二次 void CInfoIndexYCBase::SetTransFlag(const BOOL &bTransFlag) { m_strTransFlag = bTransFlag ? _T("1") : _T("0"); }
const BOOL CInfoIndexYCBase::GetTransFlag()const { if(m_strTransFlag == _T("1")) return TRUE; return FALSE; }
//设置、获取PT一次(不取float类型是因为含有单位) void CInfoIndexYCBase::SetPT1(const CString &strPT1) { m_strPT1 = strPT1; }
const CString CInfoIndexYCBase::GetPT1()const { return m_strPT1; }
//设置、获取PT二次 void CInfoIndexYCBase::SetPT2(const CString &strPT2) { m_strPT2 = strPT2; }
const CString CInfoIndexYCBase::GetPT2()const { return m_strPT2; }
//设置、获取CT一次 void CInfoIndexYCBase::SetCT1(const CString &strCT1) { m_strCT1 = strCT1; }
const CString CInfoIndexYCBase::GetCT1()const { return m_strCT1; }
//设置、获取CT二次 void CInfoIndexYCBase::SetCT2(const CString &strCT2) { m_strCT2 = strCT2; }
const CString CInfoIndexYCBase::GetCT2()const { return m_strCT2; }
//设置、获取遥测量选择标志 void CInfoIndexYCBase::SetYCSelectFlag(const BOOL *pbYCSelect, const int &nYCCount) { m_strYCSelectFlag = FormatDataToSpecialStr(pbYCSelect, nYCCount); }
void CInfoIndexYCBase::GetYCSelectFlag(BOOL *pbYCSelect, const int &nYCCount) { DetachDataFromSpecialStr(m_strYCSelectFlag, pbYCSelect, nYCCount); }
//设置、获取协议类型 void CInfoIndexYCBase::SetProtocolID(const int &nProtocolID) { m_strProtocolID.Format(_T("%d"), nProtocolID); }
const int CInfoIndexYCBase::GetProtocolID()const { int nRet; swscanf(m_strProtocolID, _T("%d"), &nRet); return nRet; }
//设置、获取点表配置步骤索引 void CInfoIndexYCBase::SetIndexConfigStep(const int &nIndexConfigStep) { m_strIndexConfigStep.Format(_T("%d"), nIndexConfigStep); }
const int CInfoIndexYCBase::GetIndexConfigStep()const { int nRet; swscanf(m_strIndexConfigStep, _T("%d"), &nRet); return nRet; }
//设置、获取遥测量标识码有效标志 void CInfoIndexYCBase::SetMarkEffectFlag(const BOOL *pbMarkEffectFlag, const int &nStandbyCount) { m_strMarkEffectFlag = FormatDataToSpecialStr(pbMarkEffectFlag, nStandbyCount); }
void CInfoIndexYCBase::GetMarkEffectFlag(BOOL *pbMarkEffectFlag, const int &nStandbyCount) { DetachDataFromSpecialStr(m_strMarkEffectFlag, pbMarkEffectFlag, nStandbyCount); }
//设置、获取是否已配置详细信息标志 void CInfoIndexYCBase::SetHaveDetailInfoFlag(const BOOL &bHaveDetailInfoFlag) { m_strHaveDetailInfoFlag = bHaveDetailInfoFlag ? _T("1") : _T("0"); }
BOOL CInfoIndexYCBase::GetHaveDetailInfoFlag() { BOOL bRet = (m_strHaveDetailInfoFlag == _T("0")) ? FALSE : TRUE; return bRet; }
//设置、获取遥测量索引有效标志 void CInfoIndexYCBase::SetYCIndexEffectFlag(const BOOL *pbYCIndexEffectFlag, const int &nYCCount) { m_strYCIndexEffectFlag = FormatDataToSpecialStr(pbYCIndexEffectFlag, nYCCount); }
void CInfoIndexYCBase::GetYCIndexEffectFlag(BOOL *pbYCIndexEffectFlag, const int &nYCCount) { DetachDataFromSpecialStr(m_strYCIndexEffectFlag, pbYCIndexEffectFlag, nYCCount); }
//设置、获取遥测量算法 void CInfoIndexYCBase::SetYCArith(const int *pnYCArith, const int &nYCCount) { m_strYCArith = FormatDataToSpecialStr(pnYCArith, nYCCount); }
void CInfoIndexYCBase::GetYCArith(int *pnYCArith, const int &nYCCount) { DetachDataFromSpecialStr(m_strYCArith, pnYCArith, nYCCount); }
//设置、获取系数K void CInfoIndexYCBase::SetCoefficientK(const float *pfCoefficientK, const int &nYCCount) { m_strCoefficientK = FormatDataToSpecialStr(pfCoefficientK, nYCCount); }
void CInfoIndexYCBase::GetCoefficientK(float *pfCoefficientK, const int &nYCCount) { DetachDataFromSpecialStr(m_strCoefficientK, pfCoefficientK, nYCCount); }
//设置、获取系数B void CInfoIndexYCBase::SetCoefficientB(const float *pfCoefficientB, const int &nYCCount) { m_strCoefficientB = FormatDataToSpecialStr(pfCoefficientB, nYCCount); }
void CInfoIndexYCBase::GetCoefficientB(float *pfCoefficientB, const int &nYCCount) { DetachDataFromSpecialStr(m_strCoefficientB, pfCoefficientB, nYCCount); }
void CInfoIndexYCBase::NewPropVal( CEPROPVAL *prgPropVal, const int &nStartIndex, int &nIndex) { //No prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strNo.LockBuffer();
//SNo prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strSNo.LockBuffer();
//一次、二次标志 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strTransFlag.LockBuffer();
//PT一次 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strPT1.LockBuffer();
//PT二次 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strPT2.LockBuffer();
//CT一次 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strCT1.LockBuffer();
//CT二次 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strCT2.LockBuffer();
//遥测量选择标志 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strYCSelectFlag.LockBuffer();
//协议类型 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strProtocolID.LockBuffer();
//点表配置步骤索引 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strIndexConfigStep.LockBuffer();
//遥测量标识码有效标志 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strMarkEffectFlag.LockBuffer();
//是否已配置详细信息标志 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strHaveDetailInfoFlag.LockBuffer();
//遥测量索引有效标志 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strYCIndexEffectFlag.LockBuffer();
//遥测量算法 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strYCArith.LockBuffer();
//系数K prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strCoefficientK.LockBuffer();
//系数B prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, nStartIndex + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strCoefficientB.LockBuffer(); }
void CInfoIndexYCBase::PropValToRecord(CEPROPVAL *prgPropVal, int &nIndex) { wcscpy(m_strNo.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strSNo.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strTransFlag.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strPT1.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strPT2.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strCT1.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strCT2.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strYCSelectFlag.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strProtocolID.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strIndexConfigStep.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strMarkEffectFlag.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strHaveDetailInfoFlag.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strYCIndexEffectFlag.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strYCArith.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strCoefficientK.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strCoefficientB.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr);
m_strNo.ReleaseBuffer(); m_strSNo.ReleaseBuffer(); m_strTransFlag.ReleaseBuffer(); m_strPT1.ReleaseBuffer(); m_strPT2.ReleaseBuffer(); m_strCT1.ReleaseBuffer(); m_strCT2.ReleaseBuffer(); m_strYCSelectFlag.ReleaseBuffer(); m_strProtocolID.ReleaseBuffer(); m_strIndexConfigStep.ReleaseBuffer(); m_strMarkEffectFlag.ReleaseBuffer(); m_strHaveDetailInfoFlag.ReleaseBuffer(); m_strYCIndexEffectFlag.ReleaseBuffer(); m_strYCArith.ReleaseBuffer(); m_strCoefficientK.ReleaseBuffer(); m_strCoefficientB.ReleaseBuffer(); }
void CInfoIndexYCBase::DeletePropVal() { m_strNo.UnlockBuffer(); m_strSNo.UnlockBuffer(); m_strTransFlag.UnlockBuffer(); m_strPT1.UnlockBuffer(); m_strPT2.UnlockBuffer(); m_strCT1.UnlockBuffer(); m_strCT2.UnlockBuffer(); m_strYCSelectFlag.UnlockBuffer(); m_strProtocolID.UnlockBuffer(); m_strIndexConfigStep.UnlockBuffer(); m_strMarkEffectFlag.UnlockBuffer(); m_strHaveDetailInfoFlag.UnlockBuffer(); m_strYCIndexEffectFlag.UnlockBuffer(); m_strYCArith.UnlockBuffer(); m_strCoefficientK.UnlockBuffer(); m_strCoefficientB.UnlockBuffer(); }
//赋值,为子类重载 = 做准备 void CInfoIndexYCBase::Evaluate(const CInfoIndexYCBase &infoIndexBase) { m_strNo = infoIndexBase.m_strNo; m_strSNo = infoIndexBase.m_strSNo; m_strTransFlag = infoIndexBase.m_strTransFlag; m_strPT1 = infoIndexBase.m_strPT1; m_strPT2 = infoIndexBase.m_strPT2; m_strCT1 = infoIndexBase.m_strCT1; m_strCT2 = infoIndexBase.m_strCT2; m_strYCSelectFlag = infoIndexBase.m_strYCSelectFlag; m_strProtocolID = infoIndexBase.m_strProtocolID; m_strIndexConfigStep = infoIndexBase.m_strIndexConfigStep; m_strMarkEffectFlag = infoIndexBase.m_strMarkEffectFlag; m_strHaveDetailInfoFlag = infoIndexBase.m_strHaveDetailInfoFlag; m_strYCIndexEffectFlag = infoIndexBase.m_strYCIndexEffectFlag; m_strYCArith = infoIndexBase.m_strYCArith; m_strCoefficientK = infoIndexBase.m_strCoefficientK; m_strCoefficientB = infoIndexBase.m_strCoefficientB; } // InfoIndexYCCDT.h: interface for the CInfoIndexYCCDT class. // //
#if !defined(AFX_INFOINDEXYCCDT_H__A127D99D_91CD_4B38_A98B_12A8FD3C731F__INCLUDED_) #define AFX_INFOINDEXYCCDT_H__A127D99D_91CD_4B38_A98B_12A8FD3C731F__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#include "InfoIndexYCBase.h"
class CInfoIndexYCCDT : public CInfoIndexYCBase { public: CInfoIndexYCCDT(); virtual ~CInfoIndexYCCDT();
public: void ViewParam(void); //查看结构体内容
private: enum{PROPERTYCOUNT = 19, STARTINDEX = 1300};
public: static int GetPropertyCount(void);
CInfoIndexYCCDT& operator =(const CInfoIndexYCCDT &infoIndexYCCDT);
public: //设置、获取功能码 void SetFuncCode(const int *pnFuncCode, const int &nStandbyCount = STANDBYCOUNT); void GetFuncCode(int *pnFuncCode, const int &nStandbyCount = STANDBYCOUNT);
//设置、获取功能码位置 void SetFuncCodeAddr(const int &nFuncCodeAddr); const int GetFuncCodeAddr(void)const;
//设置、获取点号 void SetDotNo(const int *pnDotNo, const int &nYCCount = YCCOUNT); void GetDotNo(int *pnDotNo, const int &nYCCount = YCCOUNT);
public: CEPROPVAL* NewPropVal(void); void PropValToRecord(CEPROPVAL *prgPropVal); void DeletePropVal(CEPROPVAL *prgPropVal);
private: CString m_strFuncCode; //功能码,其格式为:功能码1|功能码2|功能码3|功能码4|功能码5|功能码6|功能码7|功能码8|功能码9|功能码10 CString m_strFuncCodeAddr; //功能码位置 CString m_strDotNo; //点号,其格式为:Ua|Ub|Uc|Uab|Ucb|Uca|Ia|Ib|Ic|P|Q|Cos|F
};
#endif // !defined(AFX_INFOINDEXYCCDT_H__A127D99D_91CD_4B38_A98B_12A8FD3C731F__INCLUDED_)
// InfoIndexYCCDT.cpp: implementation of the CInfoIndexYCCDT class. // //
#include "stdafx.h" #include "InfoIndexYCCDT.h"
// // Construction/Destruction //
CInfoIndexYCCDT::CInfoIndexYCCDT() { m_strFuncCode = _T("-1|-1|-1|-1|-1|-1|-1|-1|-1|-1"); m_strFuncCodeAddr = _T("-1"); m_strDotNo = _T("-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1|-1"); }
CInfoIndexYCCDT::~CInfoIndexYCCDT() {
}
//查看结构体内容 void CInfoIndexYCCDT::ViewParam() { CString str; str = _T("功能码: ") + m_strFuncCode + _T("/n"); str += _T("功能码位置: ") + m_strFuncCodeAddr + _T("/n"); str += _T("点号: ") + m_strDotNo; str = CInfoIndexYCBase::ViewParam() + str; AfxMessageBox(str); }
int CInfoIndexYCCDT::GetPropertyCount() { return PROPERTYCOUNT; }
CInfoIndexYCCDT& CInfoIndexYCCDT::operator =(const CInfoIndexYCCDT &infoIndexYCCDT) { if(this == &infoIndexYCCDT) return *this;
CInfoIndexYCBase::Evaluate(infoIndexYCCDT);
m_strFuncCode = infoIndexYCCDT.m_strFuncCode; m_strFuncCodeAddr = infoIndexYCCDT.m_strFuncCodeAddr; m_strDotNo = infoIndexYCCDT.m_strDotNo;
return *this; }
//设置、获取功能码 void CInfoIndexYCCDT::SetFuncCode(const int *pnFuncCode, const int &nStandbyCount) { m_strFuncCode = FormatDataToSpecialStr(pnFuncCode, nStandbyCount); }
void CInfoIndexYCCDT::GetFuncCode(int *pnFuncCode, const int &nStandbyCount) { DetachDataFromSpecialStr(m_strFuncCode, pnFuncCode, nStandbyCount); }
//设置、获取功能码位置 void CInfoIndexYCCDT::SetFuncCodeAddr(const int &nFuncCodeAddr) { m_strFuncCodeAddr.Format(_T("%d"), nFuncCodeAddr); }
const int CInfoIndexYCCDT::GetFuncCodeAddr()const { int nRet = 0; swscanf(m_strFuncCodeAddr, _T("%d"), &nRet); return nRet; }
//设置、获取点号 void CInfoIndexYCCDT::SetDotNo(const int *pnDotNo, const int &nYCCount) { m_strDotNo = FormatDataToSpecialStr(pnDotNo, nYCCount); }
void CInfoIndexYCCDT::GetDotNo(int *pnDotNo, const int &nYCCount) { DetachDataFromSpecialStr(m_strDotNo, pnDotNo, nYCCount); }
CEPROPVAL* CInfoIndexYCCDT::NewPropVal() { CEPROPVAL *prgPropVal = new CEPROPVAL[PROPERTYCOUNT]; ZeroMemory(prgPropVal, sizeof(CEPROPVAL[PROPERTYCOUNT]));
int nIndex = 0;
//基类函数 CInfoIndexYCBase::NewPropVal(prgPropVal, STARTINDEX, nIndex);
//功能码 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, STARTINDEX + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strFuncCode.LockBuffer();
//功能码位置 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, STARTINDEX + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strFuncCodeAddr.LockBuffer();
//点号 prgPropVal[nIndex].propid = MAKELONG(CEVT_LPWSTR, STARTINDEX + nIndex); prgPropVal[nIndex++].val.lpwstr = m_strDotNo.LockBuffer();
return prgPropVal; }
void CInfoIndexYCCDT::PropValToRecord(CEPROPVAL *prgPropVal) { int nIndex = 0;
//基类函数 CInfoIndexYCBase::PropValToRecord(prgPropVal, nIndex);
wcscpy(m_strFuncCode.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strFuncCodeAddr.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr); wcscpy(m_strDotNo.GetBuffer(255), prgPropVal[nIndex++].val.lpwstr);
m_strFuncCode.ReleaseBuffer(); m_strFuncCodeAddr.ReleaseBuffer(); m_strDotNo.ReleaseBuffer(); }
void CInfoIndexYCCDT::DeletePropVal(CEPROPVAL *prgPropVal) { //基类函数 CInfoIndexYCBase::DeletePropVal();
m_strFuncCode.UnlockBuffer(); m_strFuncCodeAddr.UnlockBuffer(); m_strDotNo.UnlockBuffer(); delete prgPropVal; } ..... // ProtocolDB.h: interface for the CProtocolDB class. // //
#if !defined(AFX_PROTOCOLDB_H__060DFC2F_EDF2_417C_A5CC_850BBD2AEF47__INCLUDED_) #define AFX_PROTOCOLDB_H__060DFC2F_EDF2_417C_A5CC_850BBD2AEF47__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#include "Afxtempl.h"
#include "ProtocolVer.h" #include "InfoManufactory.h" #include "InfoProtocolName.h" #include "InfoDeviceType.h" #include "InfoProtocol.h" #include "InfoIndexYCFinally.h" #include "InfoRTUProtocol.h"
class CProtocolDB { public: CProtocolDB(); virtual ~CProtocolDB();
public: BOOL Open(void); //打开数据库 BOOL Close(void); //关闭数据库
public: //增加 BOOL AddRecord(CProtocolVer record); BOOL AddRecord(CInfoManufactory record); BOOL AddRecord(CInfoProtocolName record); BOOL AddRecord(CInfoDeviceType record); BOOL AddRecord(CInfoProtocol record); BOOL AddRecord(CInfoIndexYCFinally record); BOOL AddRecord(CInfoRTUProtocol record);
//根据指定条件获取 BOOL GetRecord(CProtocolVer &record); BOOL GetRecord(CInfoManufactory &record); BOOL GetRecord(CInfoProtocolName &record); BOOL GetRecord(CInfoDeviceType &record); BOOL GetRecord(CInfoProtocol &record); BOOL GetRecord(CInfoIndexYCFinally &record); BOOL GetRecord(CInfoRTUProtocol &record);
//编辑 BOOL EditRecord(CProtocolVer record); BOOL EditRecord(CInfoManufactory record); BOOL EditRecord(CInfoProtocolName record); BOOL EditRecord(CInfoDeviceType record); BOOL EditRecord(CInfoProtocol record); BOOL EditRecord(CInfoIndexYCFinally record); BOOL EditRecord(CInfoRTUProtocol record);
//删除 BOOL DeleteRecord(void); //删除版本号 BOOL DeleteRecord(CInfoManufactory record); BOOL DeleteRecord(CInfoProtocolName record); BOOL DeleteRecord(CInfoDeviceType record); BOOL DeleteRecord(CInfoProtocol record); BOOL DeleteRecord(CInfoIndexYCFinally record); BOOL DeleteRecord(CInfoRTUProtocol record);
//判断是否存在 BOOL HaveRecord(void); BOOL HaveRecord(CInfoManufactory record); BOOL HaveRecord(CInfoProtocolName record); BOOL HaveRecord(CInfoDeviceType record); BOOL HaveRecord(CInfoProtocol record); BOOL HaveRecord(CInfoIndexYCFinally record); BOOL HaveRecord(CInfoRTUProtocol record);
//获取指定表中的所有记录 BOOL LoadRecord(CList<CProtocolVer, CProtocolVer> &templ); BOOL LoadRecord(CList<CInfoManufactory, CInfoManufactory> &templ); BOOL LoadRecord(CList<CInfoProtocolName, CInfoProtocolName> &templ); BOOL LoadRecord(CList<CInfoDeviceType, CInfoDeviceType> &templ); BOOL LoadRecord(CList<CInfoProtocol, CInfoProtocol> &templ); BOOL LoadRecord(CList<CInfoIndexYCFinally, CInfoIndexYCFinally> &templ); BOOL LoadRecord(CList<CInfoRTUProtocol, CInfoRTUProtocol> &templ);
public: void SetbUpdateDataBase(BOOL bUpdateDataBase); BOOL GetbUpdateDataBase();
private: BOOL MountVol(void); BOOL CreateDB(void); BOOL OpenDB(void);
//读取 BOOL ReadRecord(CProtocolVer &record); BOOL ReadRecord(CInfoManufactory &record); BOOL ReadRecord(CInfoProtocolName &record); BOOL ReadRecord(CInfoDeviceType &record); BOOL ReadRecord(CInfoProtocol &record); BOOL ReadRecord(CInfoIndexYCFinally &record); BOOL ReadRecord(CInfoRTUProtocol &record);
private: CEGUID m_guid2; CEGUID m_guid3;
HANDLE m_hDB_ProtocolVer; HANDLE m_hDB_Manufactory; HANDLE m_hDB_ProtocolName; HANDLE m_hDB_DeviceType; HANDLE m_hDB_Protocol; HANDLE m_hDB_IndexYCFinally; HANDLE m_hDB_RTUProtocol;
private: enum{TABLECOUNT = 7}; //记录表的个数 static CString s_strTablesName[TABLECOUNT]; //记录表名
private: BOOL m_bIsOpen; //记录是否数据库已经打开 BOOL m_bUpdateDataBase; //数据库升级标志 FALSE 不升级,TRUE 升级
};
#endif // !defined(AFX_PROTOCOLDB_H__060DFC2F_EDF2_417C_A5CC_850BBD2AEF47__INCLUDED_) // ProtocolDB.cpp: implementation of the CProtocolDB class. // //
#include "stdafx.h" #include "ProtocolDB.h"
// // Construction/Destruction // CString CProtocolDB::s_strTablesName[TABLECOUNT] = {_T("DB_ProtocolVer"), _T("DB_Manufactory"), _T("DB_ProtocolName"), _T("DB_DeviceType"), _T("DB_ProtocolInfo"), _T("DB_IndexYCFInally"), _T("DB_RTUProtocol")};
CProtocolDB::CProtocolDB() { m_bIsOpen = FALSE; m_bUpdateDataBase = FALSE; }
CProtocolDB::~CProtocolDB() {
}
BOOL CProtocolDB::MountVol() { // Mount a volume BOOL bResult; if(m_bUpdateDataBase) { ::CreateDirectory(_T("//Disk//DataBase "), NULL); bResult = CeMountDBVol( &m_guid3, // guid of mount TEXT("//Disk//DataBase//ProtocolDB.cdb "), // full path and name of database volume OPEN_ALWAYS); } else { ::CreateDirectory(_T("//Disk//Test "), NULL); bResult = CeMountDBVol( &m_guid2, // guid of mount TEXT("//Disk//Test//ProtocolDB.cdb "), // full path and name of database volume OPEN_ALWAYS); }// flags
return bResult; }
BOOL CProtocolDB::CreateDB() { CEGUID *pGUID = m_bUpdateDataBase ? (&m_guid3) : (&m_guid2);
for(int i = 0; i < TABLECOUNT; i++) { CEOID oid = 0;
CEDBASEINFO ced; ZeroMemory(&ced, sizeof(CEDBASEINFO)); ced.dwSize = sizeof(CEDBASEINFO); ced.dwFlags = CEDB_VALIDNAME; wcscpy(ced.szDbaseName, CProtocolDB::s_strTablesName[i]);
oid = CeCreateDatabaseEx( pGUID, // guid of mounted database &ced); // database information
if(!oid) return FALSE; }
CProtocolVer protocolVer; protocolVer.SetVerNo(_T("1.0")); AddRecord(protocolVer);
return TRUE; }
BOOL CProtocolDB::OpenDB() { CEGUID *pGUID = m_bUpdateDataBase ? (&m_guid3) : (&m_guid2);
HANDLE *phDB[TABLECOUNT] = {&m_hDB_ProtocolVer, &m_hDB_Manufactory, &m_hDB_ProtocolName, &m_hDB_DeviceType, &m_hDB_Protocol, &m_hDB_IndexYCFinally, &m_hDB_RTUProtocol};
for(int i = 0; i < TABLECOUNT; i++) { CEOID oid = 0; *phDB[i] = CeOpenDatabaseEx( &m_guid2, // guid of mounted database &oid, // object identifier of database CProtocolDB::s_strTablesName[i].GetBuffer(0), // name of database 0, // Property id for sort order 0/*CEDB_AUTOINCREMENT*/, // auto increment record pointer on ReadRecord NULL); if(*phDB[i] == INVALID_HANDLE_VALUE) return FALSE; }
return TRUE; }
BOOL CProtocolDB::Open() { if(m_bIsOpen) return TRUE;
BOOL bResult = FALSE;
// Mount database volume bResult = MountVol(); if(!bResult) return FALSE;
// Open the database bResult = OpenDB(); if(!bResult) { // If not create the database bResult = CreateDB(); if(!bResult) return FALSE; // Open the database bResult = OpenDB(); if(!bResult) return FALSE; }
// Seek to the beginning of a populated database DWORD dwIndex; CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex); CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex);
m_bIsOpen = TRUE;
return TRUE; }
BOOL CProtocolDB::Close() { if(!m_bIsOpen) return TRUE;
CEGUID *pGUID = m_bUpdateDataBase ? (&m_guid3) : (&m_guid2);
if(!CeFlushDBVol(pGUID)) return FALSE;
if(!CeUnmountDBVol(pGUID)) return FALSE;
CloseHandle(m_hDB_ProtocolVer); CloseHandle(m_hDB_Manufactory); CloseHandle(m_hDB_ProtocolName); CloseHandle(m_hDB_DeviceType); CloseHandle(m_hDB_Protocol); CloseHandle(m_hDB_IndexYCFinally); CloseHandle(m_hDB_RTUProtocol);
m_bIsOpen = FALSE;
/* if(m_bUpdateDataBase) { ::DeleteFile(_T("//Disk//Test//ProtocolDB.cdb ")); if(!::CopyFile(_T("//Disk//DataBase//ProtocolDB.cdb"),_T("//Disk//Test//ProtocolDB.cdb"),FALSE )) return FALSE; ::DeleteFile(_T("//Disk//DataBase//ProtocolDB.cdb "));
} */ return TRUE; }
BOOL CProtocolDB::AddRecord(CProtocolVer record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_ProtocolVer, // handle to database 0, // Create new record CProtocolVer::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoManufactory record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_Manufactory, // handle to database 0, // Create new record CInfoManufactory::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoProtocolName record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_ProtocolName, // handle to database 0, // Create new record CInfoProtocolName::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoDeviceType record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_DeviceType, // handle to database 0, // Create new record CInfoDeviceType::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoProtocol record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_Protocol, // handle to database 0, // Create new record CInfoProtocol::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoIndexYCFinally record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_IndexYCFinally, // handle to database 0, // Create new record CInfoIndexYCFinally::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::AddRecord(CInfoRTUProtocol record) { CEPROPVAL *prgPropVal = record.NewPropVal(); CEOID oid = CeWriteRecordProps( m_hDB_RTUProtocol, // handle to database 0, // Create new record CInfoRTUProtocol::GetPropertyCount(), // properties count prgPropVal); // propval structure record.DeletePropVal(prgPropVal);
// return TRUE/FALSE based on resultant value if(oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::ReadRecord(CProtocolVer &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_ProtocolVer, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoManufactory &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_Manufactory, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoProtocolName &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_ProtocolName, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoDeviceType &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_DeviceType, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoProtocol &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_Protocol, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoIndexYCFinally &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_IndexYCFinally, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::ReadRecord(CInfoRTUProtocol &record) { BYTE *prgBuffer = NULL; DWORD dwBuffer = 0; WORD wPropId = 0;
CEOID oid = CeReadRecordPropsEx( m_hDB_RTUProtocol, // handle to database CEDB_ALLOWREALLOC, // flags &wPropId, // read all properties NULL, // read all properties &prgBuffer, // pointer to buffer &dwBuffer, // sizeof buffer NULL); // parameter not meaningful
if(oid) { record.PropValToRecord((CEPROPVAL *) prgBuffer);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::GetRecord(CProtocolVer &record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex); if(!oid) { ReadRecord(record); return TRUE; }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoManufactory &record) { CInfoManufactory infoManufactory;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoManufactory);
if(record.GetNo() != _T("")) { if(infoManufactory.GetNo() == record.GetNo()) { record = infoManufactory;
return TRUE; } } else { if(infoManufactory.GetManufactoryName() == record.GetManufactoryName()) { record = infoManufactory;
return TRUE; } }
oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoProtocolName &record) { CInfoProtocolName infoProtocolName;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocolName);
if(record.GetNo() != _T("")) { if(infoProtocolName.GetNo() == record.GetNo()) { record = infoProtocolName;
return TRUE; } } else { if( (infoProtocolName.GetSNo() == record.GetSNo()) && (infoProtocolName.GetProtocolName() == record.GetProtocolName())) { record = infoProtocolName;
return TRUE; } }
oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoDeviceType &record) { CInfoDeviceType infoDeviceType;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoDeviceType);
if(record.GetNo() != _T("")) { if(infoDeviceType.GetNo() == record.GetNo()) { record = infoDeviceType;
return TRUE; } } else { if( (infoDeviceType.GetManufactoryNo() == record.GetManufactoryNo()) && (infoDeviceType.GetDeviceType() == record.GetDeviceType())) { record = infoDeviceType;
return TRUE; } }
oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoProtocol &record) { CInfoProtocol infoProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocol);
if(record.GetNo() != _T("")) { if(infoProtocol.GetNo() == record.GetNo()) { record = infoProtocol;
return TRUE; } } else { if(infoProtocol.GetSNo() == record.GetSNo()) { record = infoProtocol;
return TRUE; } }
oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoIndexYCFinally &record) { CInfoIndexYCFinally infoIndexYCFinally;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoIndexYCFinally);
if(infoIndexYCFinally.GetNo() == record.GetNo()) { record = infoIndexYCFinally;
return TRUE; }
oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::GetRecord(CInfoRTUProtocol &record) { CInfoRTUProtocol infoRTUProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoRTUProtocol);
if(infoRTUProtocol.GetNo() == _T("")) { if(infoRTUProtocol.GetNo() == record.GetNo()) { record = infoRTUProtocol;
return TRUE; } } else { if(infoRTUProtocol.GetRTUNo() == record.GetRTUNo()) { record = infoRTUProtocol;
return TRUE; } }
oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::EditRecord(CProtocolVer record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex);
if(!oid) return FALSE;
if(CeWriteRecordProps( m_hDB_ProtocolVer, // handle to database oid, // Modify record CProtocolVer::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoManufactory record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoManufactory tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_Manufactory, // handle to database oid, // Modify record CInfoManufactory::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoProtocolName record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoProtocolName tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_ProtocolName, // handle to database oid, // Modify record CInfoProtocolName::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoDeviceType record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoDeviceType tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_DeviceType, // handle to database oid, // Modify record CInfoDeviceType::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal);
return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoProtocol record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoProtocol tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_Protocol, // handle to database oid, // Modify record CInfoProtocol::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal); return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoIndexYCFinally record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoIndexYCFinally tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_IndexYCFinally, // handle to database oid, // Modify record CInfoIndexYCFinally::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal); return TRUE; }
return FALSE; }
BOOL CProtocolDB::EditRecord(CInfoRTUProtocol record) { CEPROPVAL *prgPropVal = record.NewPropVal();
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex);
CInfoRTUProtocol tempRecord; BOOL bExist = FALSE; while(oid) { ReadRecord(tempRecord);
if(tempRecord.GetNo() == record.GetNo()) { bExist = TRUE; break; }
oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_CURRENT, 1, &dwIndex); } if(!bExist) return FALSE;
if(CeWriteRecordProps( m_hDB_RTUProtocol, // handle to database oid, // Modify record CInfoRTUProtocol::GetPropertyCount(), // properties count prgPropVal)) // propval structure { record.DeletePropVal(prgPropVal); return TRUE; }
return FALSE; }
BOOL CProtocolDB::DeleteRecord() { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
if(!oid) return TRUE; if(!CeDeleteRecord(m_hDB_ProtocolVer, oid)) return FALSE;
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoManufactory record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoManufactory tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_Manufactory, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoProtocolName record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoProtocolName tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_ProtocolName, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoDeviceType record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoDeviceType tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_DeviceType, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoProtocol record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoProtocol tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_Protocol, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoIndexYCFinally record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoIndexYCFinally tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_IndexYCFinally, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::DeleteRecord(CInfoRTUProtocol record) { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); //ASSERT(oid);
CInfoRTUProtocol tempRecord;
while(oid) { ReadRecord(tempRecord);
// Update GUI with currently selected record if(tempRecord.GetNo() == record.GetNo()) { if(!CeDeleteRecord(m_hDB_RTUProtocol, oid)) return FALSE;
return TRUE; }
oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::HaveRecord() { DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex); if(!oid) return TRUE;
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoManufactory record) { CInfoManufactory infoManufactory;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoManufactory);
if(record.GetNo() != _T("")) { if(infoManufactory.GetNo() == record.GetNo()) { return TRUE; } } else { if(infoManufactory.GetManufactoryName() == record.GetManufactoryName()) { return TRUE; } }
oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoProtocolName record) { CInfoProtocolName infoProtocolName;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocolName);
if(record.GetNo() != _T("")) { if(infoProtocolName.GetNo() == record.GetNo()) { return TRUE; } } else { if( (infoProtocolName.GetSNo() == record.GetSNo()) && (infoProtocolName.GetProtocolName() == record.GetProtocolName())) { return TRUE; } }
oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoDeviceType record) { CInfoDeviceType infoDeviceType;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoDeviceType);
if(record.GetNo() != _T("")) { if(infoDeviceType.GetNo() == record.GetNo()) { return TRUE; } } else { if( (infoDeviceType.GetManufactoryNo() == record.GetManufactoryNo()) && (infoDeviceType.GetProtocolNameNo() == record.GetProtocolNameNo()) && (infoDeviceType.GetDeviceType() == record.GetDeviceType())) { return TRUE; } }
oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoProtocol record) { CInfoProtocol infoProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocol);
if(infoProtocol.GetSNo() == record.GetSNo()) return TRUE;
oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoIndexYCFinally record) { CInfoIndexYCFinally infoIndexYCFinally;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoIndexYCFinally);
if(infoIndexYCFinally.GetSNo() == record.GetSNo()) return TRUE;
oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::HaveRecord(CInfoRTUProtocol record) { CInfoRTUProtocol infoRTUProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoRTUProtocol);
if(infoRTUProtocol.GetRTUNo() == record.GetRTUNo()) return TRUE;
oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return FALSE; }
BOOL CProtocolDB::LoadRecord(CList<CProtocolVer, CProtocolVer> &templ) { templ.RemoveAll();
CProtocolVer protocolVer;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(protocolVer);
if(templ.IsEmpty()) templ.AddHead(protocolVer); else templ.AddTail(protocolVer);
oid = CeSeekDatabase(m_hDB_ProtocolVer, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoManufactory, CInfoManufactory> &templ) { templ.RemoveAll();
CInfoManufactory infoManufactory;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoManufactory);
if(templ.IsEmpty()) templ.AddHead(infoManufactory); else templ.AddTail(infoManufactory);
oid = CeSeekDatabase(m_hDB_Manufactory, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoProtocolName, CInfoProtocolName> &templ) { templ.RemoveAll();
CInfoProtocolName infoProtocolName;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocolName);
if(templ.IsEmpty()) templ.AddHead(infoProtocolName); else templ.AddTail(infoProtocolName);
oid = CeSeekDatabase(m_hDB_ProtocolName, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoDeviceType, CInfoDeviceType> &templ) { templ.RemoveAll();
CInfoDeviceType infoDeviceType;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoDeviceType);
if(templ.IsEmpty()) templ.AddHead(infoDeviceType); else templ.AddTail(infoDeviceType);
oid = CeSeekDatabase(m_hDB_DeviceType, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoProtocol, CInfoProtocol> &templ) { templ.RemoveAll();
CInfoProtocol infoProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoProtocol);
if(templ.IsEmpty()) templ.AddHead(infoProtocol); else templ.AddTail(infoProtocol);
oid = CeSeekDatabase(m_hDB_Protocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoIndexYCFinally, CInfoIndexYCFinally> &templ) { templ.RemoveAll();
CInfoIndexYCFinally infoIndexYCFinally;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoIndexYCFinally);
if(templ.IsEmpty()) templ.AddHead(infoIndexYCFinally); else templ.AddTail(infoIndexYCFinally);
oid = CeSeekDatabase(m_hDB_IndexYCFinally, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
BOOL CProtocolDB::LoadRecord(CList<CInfoRTUProtocol, CInfoRTUProtocol> &templ) { templ.RemoveAll();
CInfoRTUProtocol infoRTUProtocol;
DWORD dwIndex; CEOID oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_BEGINNING, 0, &dwIndex); while(oid) { ReadRecord(infoRTUProtocol);
if(templ.IsEmpty()) templ.AddHead(infoRTUProtocol); else templ.AddTail(infoRTUProtocol);
oid = CeSeekDatabase(m_hDB_RTUProtocol, CEDB_SEEK_CURRENT, 1, &dwIndex); }
return TRUE; }
void CProtocolDB::SetbUpdateDataBase(BOOL bUpdateDataBase) { m_bUpdateDataBase = bUpdateDataBase; } BOOL CProtocolDB::GetbUpdateDataBase() { return m_bUpdateDataBase; }