zoukankan      html  css  js  c++  java
  • 【转】WinCE数据库之CCeDBDatabase

     CCeDBDatabase类提供一系列api函数以操作WinCE下的数据库文件*.db,不过该数据库文件一般由系统自动创建于Database文件夹下面,该文件保存于内存中,仪器重启即丢失。此方式可用于数据量大且短期需要保存数据的系统。其操作具体如下所示:
    1、定义数据库对象:
      CCeDBDatabase db;
    
    2、创建数据库:
    // Create database
     CCeDBProp dbprops[3] =
     {
      CCeDBProp(CCeDBProp::Type_String,PROP_NO,CCeDBProp::Sort_Ascending),
       CCeDBProp(CCeDBProp::Type_String,PROP_Name,CCeDBProp::Sort_Ascending),
      CCeDBProp(CCeDBProp::Type_UShort,PROP_Age,CCeDBProp::Sort_Ascending)
     };
     if(!CCeDBDatabase::Exists(_T("Student.db")))
     {
      db.Create(_T("Student.db"),DB_IDENT_ID,3,dbprops);
     }
    
    3、新增记录:
    UpdateData(true);
     if(!db.Open(_T("Student.db")))
     {
      MessageBox(_T("Database open Error!"));
      return;
     }
     CCeDBProp props[3];
     CCeDBRecord rec;
     props[0] = CCeDBProp((LPWSTR)(LPCTSTR)m_No,PROP_NO);
     props[1] = CCeDBProp((LPWSTR)(LPCTSTR)m_Name, PROP_Name);
     if(db.SeekFirstEqual(props[1]))
     {
      MessageBox(_T("tiger"));
      db.Close();
      return;
     }
     props[2] = CCeDBProp((USHORT)m_Age,PROP_Age);
     rec.AddProps(props,3);
     if(!db.AddRecord(&rec))
     {
      MessageBox(_T("Add Record Error!"));
      return;
     }
     db.Close();
    
    4、编辑记录:
    UpdateData(true);
     if(!db.Open(_T("Student.db")))
     {
      MessageBox(_T("Database open Error!"));
     }
    
     CCeDBRecord rec;
     CCeDBProp pProp[2];
    // pProp[0]=CCeDBProp((LPWSTR)(LPCTSTR)m_No,PROP_NO);
     pProp[0]=CCeDBProp((LPWSTR)(LPCTSTR)m_Name,PROP_Name);
     pProp[1]=CCeDBProp((USHORT)m_Age,PROP_Age);
     rec.AddProps(pProp,2);
     //OK
    /* CCeDBProp pProp1[1];
     pProp1[0]=CCeDBProp((LPWSTR)(LPCTSTR)m_No,PROP_NO);
     db.SeekFirstEqual(pProp1[0]);
     db.WriteCurrRecord(&rec);*/
     //修改数据OK
     //////////////////////////
    /* BOOL OldSeekNext=db.m_bAutoSeekNext;
     db.m_bAutoSeekNext=true;
     db.SeekFirst();
     CCeDBRecord temprec;
     CCeDBProp* tempProp;
     CString strNO,strName;
     while(db.ReadCurrRecord(&temprec))
     {
      tempProp=temprec.GetPropFromIdent(PROP_NO);
      strNO=tempProp->GetString();
      tempProp=temprec.GetPropFromIdent(PROP_Name);
      strName=tempProp->GetString();
      if((strNO == m_No)&&(strName == m_Name))
      {
       if(db.m_bEOF)
        db.SeekLast();
       else
        db.SeekPrev();
       db.WriteCurrRecord(&rec);
       break;
      }
     }
     db.m_bAutoSeekNext=OldSeekNext;*/
     ////////////////////////
     //定位记录
     BOOL OldSeekNext=db.m_bAutoSeekNext;
     db.m_bAutoSeekNext=true;
     CCeDBProp AimProp[1];
     AimProp[0]=CCeDBProp((LPWSTR)(LPCTSTR)m_No,PROP_NO);
     if(db.SeekFirstEqual(AimProp[0]))
     {
      CCeDBRecord temprec;
      CCeDBProp *tempProp;
      CString strName;
     // do
    //  {
       db.ReadCurrRecord(&temprec);
      // tempProp=temprec.GetPropFromIdent(PROP_Name);
      // strName=tempProp->GetString();
    
      // MessageBox(strName);
      // if(!db.m_bEOF)
      //  MessageBox(_T("tiger"));
    
       if(!db.m_bEOF)
        db.SeekPrev();
       db.DeleteCurrRecord();
      /* if(strName == m_Name)
       {
        db.WriteCurrRecord(&rec);
        break;
       }*/
     // }while(db.SeekNextEqual(AimProp[0]));
     }
     db.m_bAutoSeekNext=OldSeekNext;
     /////////////////////////////////////
     db.Close();
    
    5、删除记录:
    if(!db.Open(_T("Student.db")))
     {
      MessageBox(_T("Database open Error!"));
     }
     //取得列表中选择的记录
     POSITION pos=m_CtrlList.GetFirstSelectedItemPosition();
     int nItem=m_CtrlList.GetNextSelectedItem(pos);
    
     CString NO=m_CtrlList.GetItemText(nItem,0);
     CCeDBProp pProp[1];
     pProp[0]=CCeDBProp(NO.GetBuffer(0),PROP_NO);
     db.SeekFirstEqual(pProp[0]);
    
     ////////////////////
     CCeDBRecord rec;
     db.ReadCurrRecord(&rec);
     CCeDBProp* tempProp;
     tempProp=rec.GetPropFromIdent(PROP_NO);
     CString strNO=tempProp->GetString();
     MessageBox(strNO);
     /////////////////////
     db.DeleteCurrRecord();
     db.Close();
    
    6、遍历记录
    m_CtrlList.DeleteAllItems();
     if(!db.Open(_T("Student.db")))
     {
      MessageBox(_T("Database open Error!"));
     }
    
     CCeDBProp* pProp;
     int nItem=0;
     CString str;
     BOOL bPrev = db.m_bAutoSeekNext;
     db.m_bAutoSeekNext = TRUE;
     db.SeekFirst();
     CCeDBRecord rec;
     while(db.ReadCurrRecord(&rec))
     {
      pProp=rec.GetPropFromIdent(PROP_NO);
      LPWSTR strNO=pProp->GetString();
      m_CtrlList.InsertItem(nItem,strNO);
      pProp=rec.GetPropFromIdent(PROP_Name);
      LPWSTR strName=pProp->GetString();
      m_CtrlList.SetItemText(nItem,1,strName);
      pProp=rec.GetPropFromIdent(PROP_Age);
      USHORT Age=pProp->GetUShort();
      str.Format(_T("%d"),Age);
      m_CtrlList.SetItemText(nItem,2,str);
     }
     db.m_bAutoSeekNext = bPrev;
     db.Close();
  • 相关阅读:
    POJ3693 Maximum repetition substring —— 后缀数组 重复次数最多的连续重复子串
    SPOJ
    POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串
    POJ3261 Milk Patterns —— 后缀数组 出现k次且可重叠的最长子串
    POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串
    SPOJ
    AC自动机小结
    HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP
    POJ1625 Censored! —— AC自动机 + DP + 大数
    Herding
  • 原文地址:https://www.cnblogs.com/91program/p/5246591.html
Copyright © 2011-2022 走看看