偶的blog新开,也不知道放点什么东西上来适当些,前些日子搞了一段时间的CE设备数据采集器(也就是装有CE系统的掌上电脑啦)。那趁这个机会,作个总结吧。
既然是作数据采集方面的,当然少不了对数据的存储了。在此,偶用的CDB格式的ACCESS数据库,就是一个简化了的MDB版本。对于新手来说,CE上连接数据库是件比较麻烦的事情,因为很多事情都要自己动手做,现成的别人已经开发好的东西很少。
就拿将MDB格式的数据库转化成CDB数据库来说吧。本来装了微软的ActiveSync的软件之后,当你把MDB数据库拷贝到掌机上的时候,它本身就有个功能是自动得将MDB数据库转化成CDB的。但是,这有个前提:目标的CE系统必须是已经装好了数据库驱动的。问题就出现了,这个驱动怎么装?
一、数据库驱动安装:
看了很多资料,了解到网上个有个cab的驱动包,名字叫作:adoce31.arm.cab,214K大小(这个是arm4版本的),不知道微软上面有没有,但是在网上搜下,应该不难找到。当我兴致冲冲的下载了之后,本以为应该一装上就应该没问题了。其实,不然~!虽然在CE上安装是成功的,但是当我试着转化MDB的时候,问题同样出现了,错误提示:转化失败,远程过程调用失败!
好了,东西有了,但是光有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文件中此处改为
BOOLCVORecordset::g_Init = FALSE;
CLSIDCVORecordset::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)来获取数据库中的字符串了,存储的话,也是和一般的数据库操作类似。