WinCE5.0的一个EDB应用程序Debug版可以运行Release版就是老出错

yuanyan   2009-9-10 09:36 楼主
如题:

WinCE5.0的一个EDB应用程序Debug版可以运行Release版就是老出错,

痛苦啊!

而且EDB容量还是比较小的,这是烦死了

回复评论 (6)

什么错误呢?
点赞  2009-9-10 09:37
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2009-9-10 09:38
用Debug版时,一点都没有问题;但是用Relse版调试时,就出现问题:

  1. BOOL CComTestDlg::AddNewStudent(const REC_STUDENT *pRecStudent)
  2. {
  3.         //定义学生数据库对象
  4.         //CComTestDlg tblStudent;
  5.         CEOID ceOid;
  6.         //定义字段属性
  7.         //CEPROPVAL pProps[4];
  8.         CEPROPVAL pProps[2];
  9.         DWORD dwErrorCode = 0;

  10.         DWORD dwWritten = 0;

  11.         //1,打开数据库--在程序初始化时打开或创建
  12.         //if (!tblStudent.DB_Open_Student())
  13.         if(m_hDB==NULL)
  14.                 if (!DB_Open_Student())
  15.                 {
  16.                         //打开数据库失败
  17.                         return FALSE;
  18.                 }

  19.         //给字段属性赋值
  20.         ZeroMemory(&pProps[0],sizeof(CEPROPVAL)*4);

  21.         [color=#FF0000]
  22.         //编号
  23.         pProps[0].propid = PID_NO;
  24.         pProps[0].val.lpwstr = LPWSTR(pRecStudent->szNo);
  25.         pProps[0].wFlags = 0;

  26.         //数据
  27.         pProps[1].propid = PID_NAME ;
  28.         pProps[1].val.lpwstr = LPWSTR(pRecStudent->szName);
  29.         pProps[1].wFlags = 0;[/color]

  30.         //写入记录
  31.         ceOid = CeWriteRecordProps(m_hDB,0,2,pProps);

  32.         if (ceOid == 0)
  33.         {
  34.                 dwErrorCode = GetLastError();
  35.                 //如果 dwErrorCode  = 183, 表示编号重复
  36.                 //ERROR_ALREADY_EXISTS--183;ERROR_DISK_FULL--112;ERROR_INVALID_PARAMETER--87;
  37.                 if (dwErrorCode == ERROR_ALREADY_EXISTS)
  38.                 {
  39.                         TRACE(L"编号重复\n");
  40.                 }
  41.                 else
  42.                 {
  43.                         TRACE(L"写入记录失败 , Error Code = %d \n",dwErrorCode);
  44.                 }
  45.                
  46.                 //关闭数据库
  47.                 //tblStudent.DB_Close_Student();
  48.                 DB_Close_Student();
  49.                 return FALSE;
  50.         }


  51.         return TRUE;
  52. }



红色部分的在Release版时,两个lpwstr变量不能得到数据,说是错误的指针!

然后就执行ceOid = CeWriteRecordProps(m_hDB,0,2,pProps);语句就报错!
点赞  2009-9-10 09:43

  1.         [color=#FF0000]//编号
  2.         pProps[0].propid = PID_NO;
  3.         pProps[0].val.lpwstr = LPWSTR(pRecStudent->szNo);
  4.         pProps[0].wFlags = 0;

  5.         //数据
  6.         pProps[1].propid = PID_NAME ;
  7.         pProps[1].val.lpwstr = LPWSTR(pRecStudent->szName);
  8.         pProps[1].wFlags = 0;[/color]
点赞  2009-9-10 09:45
关注
点赞  2009-9-22 11:28
问题解决了,是这里有问题:

ZeroMemory(&pProps[0],sizeof(CEPROPVAL)*4);

这里把4改成2就好,一时疏忽,因为只定义了一个2成员的数组
点赞  2009-9-22 11:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复