4739|3

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于wince数据库打不开的原因? [复制链接]

昨天尝试着在一个应用程序里用wince数据库,结果数据库创建成功了,却打不开数据库,郁闷之极。代码如下:
  1. //1、挂载数据库卷,如果存在则打开,不存在,就新建一个
  2.         if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWAYS))
  3.         {
  4.                 AfxMessageBox(_T("打开或新建数据卷失败"));
  5.         }


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

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

  18.                         ceDbInfo.rgSortSpecs[0].propid = PID_NAME;
  19.                         ceDbInfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关

  20.                         ceDbInfo.rgSortSpecs[1].propid = PID_WAGE;
  21.                         ceDbInfo.rgSortSpecs[1].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
  22.                         m_ceOid = CeCreateDatabaseEx(&m_ceGuid,&ceDbInfo);
  23.                         if (m_ceOid == 0)
  24.                         {
  25.                                 AfxMessageBox(_T("创建数据库失败"));
  26.                                 //此处得卸载数据库卷
  27.                                 if (!CeUnmountDBVol(&m_ceGuid))
  28.                                 {
  29.                                         AfxMessageBox(_T("卸载数据库文件卷失败"));
  30.                                 }
  31.                         }
  32.                         //4、创建数据库后,应紧接着打开数据库
  33.                         m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,0,NULL);
  34.                         if (m_hDB == INVALID_HANDLE_VALUE)
  35.                         {
  36.                                 AfxMessageBox(_T("打开数据库失败"));
  37.                                 //此处得卸载数据库卷
  38.                                 if (!CeUnmountDBVol(&m_ceGuid))
  39.                                 {
  40.                                         AfxMessageBox(_T("卸载数据库文件卷失败"));
  41.                                 }

  42.                         }
  43.                 }
  44.                 else
  45.                 {
  46.                         AfxMessageBox(_T("打开数据库失败"));
  47.                         //此处得卸载数据库卷
  48.                         if (!CeUnmountDBVol(&m_ceGuid))
  49.                         {
  50.                                 AfxMessageBox(_T("卸载数据库文件卷失败"));
  51.                         }

  52.                 }
  53.         }
复制代码

大牛们快来救我啊!

最新回复

嘿嘿,太粗心了,忘了初始化数据库句柄和数据库对象标识设置了 //初始化数据库句柄 m_hDB = 0; //将数据库对象标识设置0 m_ceOid = 0; 加上这2句就没事了  详情 回复 发表于 2010-5-27 08:49
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还是要自己救自己的!

调试看看失败函数的返回值和GetLastEror()的返回值各是什么?
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
  1. //1、挂载数据库卷,如果存在则打开,不存在,就新建一个
  2.     if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWAYS))
  3.     {
  4.         AfxMessageBox(_T("打开或新建数据卷失败"));
  5.     }


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

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

  18.             ceDbInfo.rgSortSpecs[0].propid = PID_NAME;
  19.             ceDbInfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关

  20.             ceDbInfo.rgSortSpecs[1].propid = PID_WAGE;
  21.             ceDbInfo.rgSortSpecs[1].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关
  22.             m_ceOid = CeCreateDatabaseEx(&m_ceGuid,&ceDbInfo);
  23.             if (m_ceOid == 0)
  24.             {
  25.                 AfxMessageBox(_T("创建数据库失败"));
  26.                 //此处得卸载数据库卷
  27.                 if (!CeUnmountDBVol(&m_ceGuid))
  28.                 {
  29.                     AfxMessageBox(_T("卸载数据库文件卷失败"));
  30.                 }
  31.             }
  32.             //4、创建数据库后,应紧接着打开数据库
  33.             m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,0,NULL);
  34.             if (m_hDB == INVALID_HANDLE_VALUE)
  35.             {
  36.                 AfxMessageBox(_T("打开数据库失败"));
  37.                 //此处得卸载数据库卷
  38.                 if (!CeUnmountDBVol(&m_ceGuid))
  39.                 {
  40.                     AfxMessageBox(_T("卸载数据库文件卷失败"));
  41.                 }

  42.             }
  43.         }
  44.         else
  45.         {
  46.             AfxMessageBox(_T("打开数据库失败"));//我试着断点调试,运行到这里,才出现“打开数据库失败”
  47.             //此处得卸载数据库卷
  48.             if (!CeUnmountDBVol(&m_ceGuid))
  49.             {
  50.                 AfxMessageBox(_T("卸载数据库文件卷失败"));
  51.             }

  52.         }
  53.     }
复制代码
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
嘿嘿,太粗心了,忘了初始化数据库句柄和数据库对象标识设置了
//初始化数据库句柄
m_hDB = 0;
//将数据库对象标识设置0
m_ceOid = 0;
加上这2句就没事了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表