2702|2

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CE向数据库添加记录 [复制链接]

我从书上摘了一段代码,它是用来给新的数据库记录赋值的,但是有错误:
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数据库,有很多地方不懂,还请高手多多指教!!!
谢谢!!!

最新回复

To lenux:          谢谢lenux,是memset的问题,去掉以后程序就可以运行了。麻烦能不能帮我解释一下,为什么LocalSize不行,它到底应该怎么用的啊?本人刚刚接触C++,请多指教。  详情 回复 发表于 2008-5-12 10:31
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
memset(pProps,0,LocalSize(pProps));
这行可以不要,因为new出来的东西的内存自动被初始化过。


memset(pProps,0,LocalSize(pProps));
可能有问题。

UINT LocalSize(
  HLOCAL hMem
);
Parameters
hMem
[in] Handle to the local memory object.
This handle is returned by the LocalAlloc or LocalReAlloc function.


 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
To lenux:
         谢谢lenux,是memset的问题,去掉以后程序就可以运行了。麻烦能不能帮我解释一下,为什么LocalSize不行,它到底应该怎么用的啊?本人刚刚接触C++,请多指教。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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