我从书上摘了一段代码,它是用来给新的数据库记录赋值的,但是有错误:
bool CDataBaseTestDlg::AddNewStudent(REC_STUDENT stu)
{
CEOID ceOid;
CEPROPVAL *pProps;
pProps = new CEPROPVAL[4]; //pProps 就是要添加的新的记录
//学生编号
memset(pProps,0,LocalSize(pProps));
ERRORINFO.Format(_T("%d"),GetLastError());
MessageBox(_T("Invalid Handle!---1 ErrorInfo=")+ERRORINFO); //这里显示“Invalid Handle!---1 ErrorInfo=0”
pProps->propid = PID_NO;
ERRORINFO.Format(_T("%d"),GetLastError());
MessageBox(_T("Invalid Handle!---2 ErrorInfo=")+ERRORINFO);//这里显示“Invalid Handle!---2 ErrorInfo=6”
pProps->val.lpwstr = stu.szNO;
//学生姓名
pProps++;
memset(pProps,0,LocalSize(pProps));
pProps->propid = PID_NAME ;
pProps->val.lpwstr = stu.szName;
//学生出生日期
....
//学生身高
....
pProps = pProps - 3;
ceOid = CeWriteRecordProps(m_hDB, 0, 4, pProps);
if(ceOid == 0)
{
return false;
}
return true;
}
其中,常量和student结构体是这么定义的:
typedef struct
{
TCHAR szNO[7];
TCHAR szName[20];
FILETIME ftBirthday;
int iStature;
}REC_STUDENT,*PREC_STUDENT;
#define PID_NO MAKELONG(CEVT_LPWSTR,1)
#define PID_NAME MAKELONG(CEVT_LPWSTR,2)
#define PID_BIRTHDAY MAKELONG(CEVT_FILETIME,3)
#define PID_STATURE MAKELONG(CEVT_I4,4)
最后显示结果:
第一个对话框“Invalid Handle!---1 ErrorInfo=0”
第二个对话框“Invalid Handle!---2 ErrorInfo=6”
我知道GetLastError=6的话,应该是指无效句柄。可是这里为什么是无效句柄呢?难道pProps不是这么赋值的吗?可是书上就是这么写的呀。
本人刚刚接触CE数据库,有很多地方不懂,还请高手多多指教!!!
谢谢!!!