WinCE EDB (图片文件存储CeOpenStream, CeStreamWrite, CeStreamSaveChanges)

原创 2008年09月28日 10:54:00

 

#define MAKEPROP(n,t)    ((n<<16)|CEVT_##t)

 

// -----------------------------------------------------------------------------
// property of image table
#define PROPID_IMAGE_ID    MAKEPROP(200, UI4)
#define PROPID_IMAGE_STREAM   MAKELONG(CEVT_STREAM, 0x0008)

 

// 普通文件类型存储请参照系统的例子 FileDB

 

// ----------------------------------------------------------------------------

// 创建数据库
BOOL CreateDB()
{
 // define the sort information 
 SORTORDERSPECEX dbSortInfo = {0};
 dbSortInfo.wVersion = 2;
 dbSortInfo.wNumProps = 1;
 dbSortInfo.wKeyFlags = 0;
 dbSortInfo.rgPropID[0] = PROPID_IMAGE_ID;
 dbSortInfo.rgdwFlags[0] = CEDB_SORT_DESCENDING;

 // define the contact group database information
 CEDBASEINFOEX dbinfo;
 memset(&dbinfo, 0, sizeof(dbinfo));
 dbinfo.wVersion = 2;
 dbinfo.wNumSortOrder = 1;
 dbinfo.dwFlags =  CEDB_VALIDNAME | CEDB_VALIDSORTSPEC | CEDB_VALIDDBFLAGS;
 wcscpy_s(dbinfo.szDbaseName, -1, SYSTEMIMAGE_DB_NAME);
 dbinfo.dwDbaseType = 0;
 dbinfo.dwNumRecords = 3000;
 dbinfo.rgSortSpecs[0] = dbSortInfo;

 // define the property information
 CEPROPSPEC   CEPropSpec[NUM_IMAGEDB_PROPS];
 DWORD iIndex = 0;
 DefineProp(CEPropSpec, iIndex++, PROPID_IMAGE_ID,  DB_PROP_NOTNULL, TEXT("ImageID"));
 DefineProp(CEPropSpec, iIndex++, PROPID_IMAGE_STREAM, 0, TEXT("ImageStream"));

 return CeCreateDatabaseWithProps(&m_VolGUID, &dbinfo, NUM_IMAGEDB_PROPS, CEPropSpec);
}

 

// ----------------------------------------------------------------------------
// open the database
BOOL OpenDB()
{
 CEOID oidDb = 0;
 HANDLE hSession =  CeCreateSession(&m_VolGUID);
 // open database by mig33 username
 SORTORDERSPECEX dbSortInfo = {0};    
 dbSortInfo.wVersion = 2;  
 dbSortInfo.wNumProps = 1;
 dbSortInfo.wKeyFlags = 0;  
 dbSortInfo.rgPropID[0] = PROPID_IMAGE_ID;
 dbSortInfo.rgdwFlags[0] = CEDB_SORT_DESCENDING;

 CloseHandle(m_hDb); 
 m_hDb = CeOpenDatabaseInSession(hSession, &m_VolGUID, &oidDb, SYSTEMIMAGE_DB_NAME,
  &dbSortInfo, CEDB_AUTOINCREMENT, NULL);

 return (m_hDb != INVALID_HANDLE_VALUE); 
}

 

// ----------------------------------------------------------------------------
// Get object ID by primary key
CEOID  GetOidRecord(DWORD dwImageID)
{
 if (INVALID_HANDLE_VALUE == m_hDb)
 {
  DebugString(L"the contact group database is not open!");

  return 0L;
 }

 CEPROPVAL propvals;
 ZeroMemory(&propvals, sizeof(CEPROPVAL));
 propvals.propid = PROPID_IMAGE_ID;
 propvals.val.ulVal = dwImageID;
 propvals.wFlags = CEDB_PROPNOTFOUND;

 return CeSeekDatabaseEx(m_hDb, CEDB_SEEK_VALUEFIRSTEQUAL, (DWORD)&propvals, 1, NULL);
}

 

// ----------------------------------------------------------------------------

//  二进制流字段的存储

 CEPROPVAL props[1];
 SetPropValue(props, 0, PROPID_IMAGE_ID, imageItem.m_dwImageID);

 CEOID oidRecord = CeWriteRecordProps(m_hDb, 0, 1, props);

 if (!oidRecord)
 {
  DebugString(L"the image save failure!");
  return false;
 }
 else
 {
  HANDLE hStreamObject = CeOpenStream(m_hDb, PROPID_IMAGE_STREAM, GENERIC_WRITE); // important part you should read this function very  carefulness

 

  if (CeStreamWrite(hStreamObject, imageItem.m_ImageBuffer, imageItem.m_uBufferSize, NULL))
  {
   BOOL bSaveChangs = CeStreamSaveChanges(hStreamObject);

   CloseHandle(hStreamObject);
   return true;
  }
  else
  {
   CloseHandle(hStreamObject);
   return false;
  }
 }

 

// ----------------------------------------------------------------------------
// 读取文件流
BOOL ReadItem(CImageStoreItem &imageItem)
{
 CEOID oidRecord;
 WORD wNumProps;
 DWORD dwBufSize = 0;
 CEPROPVAL *pRecord = NULL;

 oidRecord = CeReadRecordPropsEx(m_hDb, CEDB_ALLOWREALLOC, &wNumProps,
  NULL, (LPBYTE *)&pRecord, &dwBufSize, NULL);

 if (0 != oidRecord)
 {
  for (WORD i = 0; i < wNumProps; i++)
  {
   switch(pRecord[i].propid)
   {
   case PROPID_IMAGE_ID:
    ReadPropValue(pRecord[i], imageItem.m_dwImageID);
    break;
   case PROPID_IMAGE_STREAM:
    imageItem.ReadBuffer(pRecord[i].val.blob.lpb, pRecord[i].val.blob.dwCount);
    break;
   default:
    break;
   }
  }
 }
 LocalFree(pRecord);

 return (0 != oidRecord);
}

 

WinCE EDB (图片文件存储CeOpenStream, CeStreamWrite, CeStreamSaveChanges)

 #define MAKEPROP(n,t)    ((n // -------------------------------------------------------------------...
  • dang800919
  • dang800919
  • 2008年10月13日 19:04
  • 492

VC操作WINCE5.0自带EDB数据库(设备测试通过)

网上关于操作EDB的资料不多,零零散散,很多都是粗略讲解,笔者没有找到正确完整的代码,经过三四天的调试,才在wince5.0设备上正确完成EDB的读写操作,关于操作函数和相关资料在此不予详述,大家可以...
  • CallMeZane
  • CallMeZane
  • 2012年09月07日 10:15
  • 867

wince文件存储及文件管理器(二)

这一篇主要想记录下wince下的存储管理器(storage manager),wince的存储管理器用来管理系统的所有外围存储设备,所有的文件、数据和容量都是通过存储管理器来操作的,存储管理器的功能由...
  • gaoyang610
  • gaoyang610
  • 2013年05月15日 10:34
  • 1192

edb-debugger在Ubuntu环境下的安装

edb-debugger的安装资料博客上都只有比较旧的版本,一开始参考安装的时候一直出错,在edb-debugger的github主页上也只找到依赖库的条件。 Dependency Versi...
  • Lydia_s8023
  • Lydia_s8023
  • 2017年03月12日 00:00
  • 1505

EDB数据库创建流程指南

本文以实战的方式介绍了二种EDB数据库创建的流程,即:使用工具创建EDB数据库和使用SQL创建EDB数据库。另外还介绍了容易混淆的enterprisedb密码修改问题、enterprisedb数据库超...
  • dixialieren
  • dixialieren
  • 2016年04月28日 11:20
  • 8239

wince EDB数据库操作实例

在WINCE下EDB的常用操作例子。
  • wudonghua9941
  • wudonghua9941
  • 2010年12月01日 10:30
  • 820

Linxu edb调试器的安装

edb是一个可视化的调试器,很强大。 在虚拟机中安装了 Ubuntu 在此基础上相安装edb,在超级用户下运行相关命令: # apt-get install qt4-dev-tools ...
  • nkguohao
  • nkguohao
  • 2013年05月20日 15:34
  • 3305

EDB(Enterprisedb)9.4安装Product key破解

1.如果在安装EDB server的系统时提示让输入Product Key(下方统称为key),不输入正确的key就不能继续安装,key的获取比较麻烦。经查官方文档发现:安装EDB server时需不...
  • dixialieren
  • dixialieren
  • 2015年07月20日 18:22
  • 2118

Wince自带EDB数据库

Wince自带EDB数据库,以下是写的一个例子:clog(通话记录): #include "TAddLog.h"#define _WIN32_DCOMTAddLog::TAddLog(){    m_...
  • mylovemengyu
  • mylovemengyu
  • 2010年09月21日 13:02
  • 740

linux下edb调试器

首先下载 http://www.52pojie.cn/thread-69117-1-1.html ru
  • zcc1414
  • zcc1414
  • 2014年04月24日 22:55
  • 1032
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinCE EDB (图片文件存储CeOpenStream, CeStreamWrite, CeStreamSaveChanges)
举报原因:
原因补充:

(最多只允许输入30个字)