欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

[转]WinCE数据库之CCeDBDatabase

程序员文章站 2022-05-23 16:17:41
...

CCeDBDatabase类提供一系列api函数以操作WinCE下的数据库文件*.db,不过该数据库文件一般由系统自动创建于Database文件夹下面,该文件保存于内存中,仪器重启即丢失。此方式可用于数据量大且短期需要保存数据的系统。其操作具体如下所示: 1、定义数据库对象

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();