我用PC-104配置的wince自带数据卷,但是用一个已经编译好并且肯定好使的数据库例子却打不开数据卷,我想问一下,使用自带数据卷还需要在系统中添加什么动态链接库之类的吗?求大家的帮助!!
是用的EDB吗?是的化要现用cemountdbvolex()来加载数据库卷,然后在打开里面的数据库
打开后才能进行读写
就是在函数的初始必须要添加语句CEMountDBVol才行吗?然后就不用在添加什么动态链接库之类的了吗?
程序中已经包括了大开数据库,但是还是不好使,就是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 ;
}
}
}
这个数据库是CEDB,怎么操作书上已经说得很明白了。每次使用数据库首先都要先加载数据库卷,然后打开数据库,再往里面写数据。不用加dll。还有书上的代码是用evc3.0写的。你用的时候要有相应的模拟器。
swordqy()
你能说得更清楚些吗?我确实按照书上说得,难道EVC3.0和4.0不同吗?
我刚才又试了一下
能创建这个数据库,名字是abc.db
但是不能把我添加的数据显示到列表框里
所以我不知道是添加没添加进去还是显示显示不出来
另外这个在PC机上也仿真不了啊
我知道你说的那个例子
首先是模拟器不匹配
另外那个例子添加记录的那段我觉得有点问题
如果是用源代码的话,必须要有相应的模拟器,自己可以参考代码在4.2上写。
还有就是书上代码有问题(我在5.0上用反正是有问题)。一个是加记录那段代码,可以自己定义一个数组来存属性值,不用new了。还有就是定义学生表示字段那个(makelong那段)应该是CEVT_I2,书上是I4,这和它定义的结构体不符,后面操作也是用的int类型。其他的好像都什么问题。我参考它的代码结构写的EDB数据库可以用,打开,添加,修改,删除,查找,都没问题。