Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5832761
  • 博文数量: 671
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 7310
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-14 09:56
文章分类

全部博文(671)

文章存档

2011年(1)

2010年(2)

2009年(24)

2008年(271)

2007年(319)

2006年(54)

我的朋友

分类: C/C++

2008-12-18 12:45:19

WinCe 上的数据库操作
2007年05月26日 星期六 15:49

偶的blog新开,也不知道放点什么东西上来适当些,前些日子搞了一段时间的CE设备数据采集器(也就是装有CE系统的掌上电脑啦)。那趁这个机会,作个总结吧。

既然是作数据采集方面的,当然少不了对数据的存储了。在此,偶用的CDB格式的ACCESS数据库,就是一个简化了的MDB版本。对于新手来说,CE上连接数据库是件比较麻烦的事情,因为很多事情都要自己动手做,现成的别人已经开发好的东西很少。

就拿将MDB格式的数据库转化成CDB数据库来说吧。本来装了微软的ActiveSync的软件之后,当你把MDB数据库拷贝到掌机上的时候,它本身就有个功能是自动得将MDB数据库转化成CDB的。但是,这有个前提:目标的CE系统必须是已经装好了数据库驱动的。问题就出现了,这个驱动怎么装?

一、数据库驱动安装:

看了很多资料,了解到网上个有个cab的驱动包,名字叫作:adoce31.arm.cab,214K大小(这个是arm4版本的),不知道微软上面有没有,但是在网上搜下,应该不难找到。当我兴致冲冲的下载了之后,本以为应该一装上就应该没问题了。其实,不然~!虽然在CE上安装是成功的,但是当我试着转化MDB的时候,问题同样出现了,错误提示:转化失败,远程过程调用失败!

怎么回事?装和不装是一个结果?于是又在网上搜,功夫不负有心人,又被我发现了8个DLL,哈哈~!据说,这8个DLL也同样是来自微软的一个安装包:adocepbzip,下载地址:

好了,东西有了,但是光有DLL文件拷贝到CE上有什么用。。。对了,要注册嘛~!ActiveSync软件的安装目录下有个叫REGSVRCE.EXE的文件,记得他的版本也要和目标机子的板子型号匹配,把它拷进CE的根目录下,然后再写个批处理文件,命名reg.bat,然后用记事本写入如下:

cd /windows

regsvrce adoce31.dll

regsvrce Adoxce31.dll

regsvrce Adocedb31.dll

regsvrce Adoceoledb31.dll

regsvrce Msdaer.dll

regsvrce Msdaeren.dll

regsvrce msdadc.dll

regsvrce msdaosp.dll

保存之后,同样也拷贝到CE根目录下,然后把8个DLL文档拷贝到CE的windows目录下,运行CE的命令提示符,输入 >reg 命令既开始注册。有了这8个DLL,再加上之前的adoce31.arm.cab安装包,就可以配合的天衣无缝了,哈哈,但是有个顺序问题,在我现有的这批机子上一定要先注册DLL,安装CAB的包才能成功。不知道在别的机子是怎么样的情况,没试过,也没条件试,呵呵(这东西,动不动就要万把块钱,自己可买不起~!)。

真搞不懂,微软到底是干什么使的,提供的资料又这么七零八碎的~!

二、连接数据库

   有了上面的准备工作,后面的就好做多了。通过偶在网上差不多10来天的研究和搜索下,据偶所知,网上有一个已经开发好的ADO类(这是对像我这等懒人的福音阿~!)

   其实该组件总共有3个文件,VOString.h,vorecordset.h,voconnection.h和对应的cpp文件,可以在http://www.voscorp.com/products/developer/winmobile/voado/voado.zip下载得到一个VoAdo的压缩包,解压之后,就OK了。然后还要配合2个文件:adoce31.h,adocec31.h,这2个文件据说也可以在adocepbzip压缩包里得到,不过是间接的,压缩包里有这样两个文件

adoce31.idl和adocec31.idl,在命令行中执行midl adoce31.idl和midl adocec31.idl即可生成.h文件.

   上面的搞定之后,a、将VoAdo中所有文件添加到你的工程中,将其中ado??30.h都改为ado??31.h;

b、将vorecordset.h文件中此处改为

BOOL   CVORecordset::g_Init = FALSE;

CLSID   CVORecordset::g_ClsID;

TCHAR* CVORecordset::g_ProgID=TEXT("ADOCE.Recordset.3.1");

原来第3句为

TCHAR* CVORecordset::g_ProgID=TEXT("ADOCE.Recordset.3.0");

C、将Include文件夹中的adoce31.h和adocec31.h添加到工程中。

   到此为止,应该算所有的准备工作都做好了,后面要做的,仅仅是调用他的类了:

//声明对象指针

CVOConnection *m_Conn;

CVORecordset *m_Set;

//初始化

m_Conn=new CVOConnection(cdbName);

m_Set=new CVORecordset(*m_Conn);

m_Set->Initialize();

m_Set->Open(s_SqlArea,adOpenForwardOnly,adLockOptimistic);

注意,要进行连接错误的检查,当所有的都成功之后,就可以用m_Set->GetFieldValueString(i)来获取数据库中的字符串了,存储的话,也是和一般的数据库操作类似。

阅读(2950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~