有人用过wince自带的数据卷吗?

hanbing841208   2007-2-1 09:47 楼主
我用PC-104配置的wince自带数据卷,但是用一个已经编译好并且肯定好使的数据库例子却打不开数据卷,我想问一下,使用自带数据卷还需要在系统中添加什么动态链接库之类的吗?求大家的帮助!!

回复评论 (10)

是用的EDB吗?是的化要现用cemountdbvolex()来加载数据库卷,然后在打开里面的数据库
打开后才能进行读写
点赞  2007-2-1 09:59
就是在函数的初始必须要添加语句CEMountDBVol才行吗?然后就不用在添加什么动态链接库之类的了吗?
点赞  2007-2-1 14:13
程序中已经包括了大开数据库,但是还是不好使,就是EVC高级编程及其应用开发那本书上带的例子,是好用的,但我在PC104上怎么也不好使
//打开数据库
void CCEDBUseDlg::OnBtnopen()
{
        //1、挂载数据库卷,如果存在则打开,不存在,就新建一个
        if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWAYS))
        {
                AfxMessageBox(_T("打开或新建数据卷失败"));
                return;
        }

       
        //2、接着打开数据库
        m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,CEDB_AUTOINCREMENT,NULL);
        if (m_hDB == INVALID_HANDLE_VALUE)
        {
                //3、 //如果数据库不存在,就新建之
                if (GetLastError() == ERROR_FILE_NOT_FOUND)
                {
                        CEDBASEINFO ceDbInfo;

                        ceDbInfo.dwFlags = CEDB_VALIDNAME | CEDB_VALIDTYPE | CEDB_VALIDSORTSPEC ;
                        wcscpy(ceDbInfo.szDbaseName , DBTABLENAME);
                        ceDbInfo.dwDbaseType = 0;
                        ceDbInfo.wNumSortOrder = 2 ; //排序字段数目

                        ceDbInfo.rgSortSpecs[0].propid = PID_NO;
                        ceDbInfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
                       
                        ceDbInfo.rgSortSpecs[1].propid = PID_NAME;
                        ceDbInfo.rgSortSpecs[1].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
                        m_ceOid = CeCreateDatabaseEx(&m_ceGuid,&ceDbInfo);
                        if (m_ceOid == 0)
                        {
                                AfxMessageBox(_T("创建数据库失败"));
                                //此处得卸载数据库卷
                                if (!CeUnmountDBVol(&m_ceGuid))
                                {
                                        AfxMessageBox(_T("卸载数据库文件卷失败"));
                                }
                                return ;
                        }
                        //4、创建数据库后,应紧接着打开数据库
                        m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,CEDB_AUTOINCREMENT,NULL);
                        if (m_hDB == INVALID_HANDLE_VALUE)
                        {
                                AfxMessageBox(_T("打开数据库失败"));
                                //此处得卸载数据库卷
                                if (!CeUnmountDBVol(&m_ceGuid))
                                {
                                        AfxMessageBox(_T("卸载数据库文件卷失败"));
                                }
                                return ;
                        }
                }
                else
                {
                        AfxMessageBox(_T("打开数据库失败"));
                        //此处得卸载数据库卷
                        if (!CeUnmountDBVol(&m_ceGuid))
                        {
                                AfxMessageBox(_T("卸载数据库文件卷失败"));
                        }
                        return ;
                }
        }
}
点赞  2007-2-1 14:25
这个数据库是CEDB,怎么操作书上已经说得很明白了。每次使用数据库首先都要先加载数据库卷,然后打开数据库,再往里面写数据。不用加dll。还有书上的代码是用evc3.0写的。你用的时候要有相应的模拟器。
点赞  2007-2-1 15:03
swordqy()

你能说得更清楚些吗?我确实按照书上说得,难道EVC3.0和4.0不同吗?
点赞  2007-2-2 09:40
我刚才又试了一下
能创建这个数据库,名字是abc.db
但是不能把我添加的数据显示到列表框里
所以我不知道是添加没添加进去还是显示显示不出来
另外这个在PC机上也仿真不了啊
点赞  2007-2-2 09:58
我知道你说的那个例子
首先是模拟器不匹配
另外那个例子添加记录的那段我觉得有点问题
点赞  2007-2-5 13:08
如果是用源代码的话,必须要有相应的模拟器,自己可以参考代码在4.2上写。
还有就是书上代码有问题(我在5.0上用反正是有问题)。一个是加记录那段代码,可以自己定义一个数组来存属性值,不用new了。还有就是定义学生表示字段那个(makelong那段)应该是CEVT_I2,书上是I4,这和它定义的结构体不符,后面操作也是用的int类型。其他的好像都什么问题。我参考它的代码结构写的EDB数据库可以用,打开,添加,修改,删除,查找,都没问题。
点赞  2007-2-6 15:03
我明白了
谢谢大家
点赞  2007-2-9 10:17
给分
点赞  2007-2-9 10:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复