WinCE数据库操作之CeCreateDatabaseEx

    技术2022-05-20  59

            与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

    Boolean

    Double

    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; }


    最新回复(0)