收录日期:2019/10/22 14:31:59 时间:2016/07/14 21:25:01 标签:Windows客户端开发
PIM.VOL中的联系人能读出来了,但是在写入新数据的时候遇到问题了,使用读取时候的字段属性来标识PROPID写入的时候结果公司的数据写到邮件里面去了看代码



// 这里是字段属性定义 
typedef enum 
{
Firstname = 0x84,//姓
WorkTel = 0x97,//工作电话
HomeTel = 0x99,//住宅电话
Lastname = 0x82,//名
Company = 0x8a,//公司/单位
JobTitle = 0x8c,//职务
Department = 0x8b,//部门
OfficeLoc = 0x8e,//办公室
MobileTel = 0x96,//移动电话 
//RadioTel = ,//无线电话
//CarTel = ,//车载电话
WorkFax = 0x9b,//工作传真
//HomeFax = ,//住宅传真
//HomeTel2 =  ,//住宅电话2
Birthday = 0xf0,//生日
//Assistant = ,//助理
Anniversary = 0xf1, //周年纪念
//AssistantTel = ,//助理电话
//Children = ,//子女
//WorkTel2 = ,//工作电话2
HomePage = 0xa7,//主页
//Pager = ,//寻呼机
//Spouse = ,//配偶
Name = 0x82,//姓名
Title = 0x86,//称呼(对联系人)
HomeAddr = 0xd1,//家庭地址
HomeCity = 0xd2,//家庭所在城市
HomeState = 0xd3,//家庭所在的省/州
HomeZip = 0xd4,//家庭邮编
HomeCountry = 0xd5,//家庭所在国家
WorkAddr = 0xc1,//工作地址
WorkCity = 0xc2,//工作的城市
WorkState = 0xc3, //工作的省/州
WorkZip = 0xc4,//工作地的邮编
WorkCountry = 0xc5,//工作地的国家
//OtherAddr = ,//其他地址
//OtherCity = ,//其他城市
//OtherState = ,//其他省/州
//OtherZip = ,//其他邮编
OtherCountry = 0xe5,//其他的国家
Email = 0x90,//电子邮箱
//Email2nd = ,//电子邮箱2
//Email3rd = //电子邮箱3
}Contacts_field;








// 这里是构造数据
vector<TrPbItem> vct;
TrPbItem ptmp;
strcpy(ptmp.birthday,"1984-3-5");
strcpy(ptmp.company,"inspur");
strcpy(ptmp.email,"jijiji@163.com");
strcpy(ptmp.homeaddress,"jksdjkcs");
strcpy(ptmp.homephone,"1234567890");
strcpy(ptmp.mobilephone,"12323234234");
strcpy(ptmp.name,"tongxue");
strcpy(ptmp.workphone,"999999999999");

vct.push_back(ptmp);

TrPbItem ptmp2;
strcpy(ptmp2.birthday,"1984-03-05");
strcpy(ptmp2.company,"");
strcpy(ptmp2.email,"jijiji@163.com");
strcpy(ptmp2.homeaddress,"jksdjkcs");
strcpy(ptmp2.homephone,"1234567890");
strcpy(ptmp2.mobilephone,"");
strcpy(ptmp2.name,"tongxue");
strcpy(ptmp2.workphone,"999999999999");
vct.push_back(ptmp2);





CEPROPVAL prop[8];
prop[0].propid = MAKELONG(CEVT_LPWSTR,Name);
prop[0].val.lpwstr =ConvertToUnicodeFromUtf8(ContactVector[i].name);
prop[0].wFlags = 0;
prop[0].wLenData = 0;

prop[1].propid = MAKELONG(CEVT_LPWSTR,MobileTel);// MobileTel;
prop[1].val.lpwstr = ConvertToUnicodeFromUtf8(ContactVector[i].mobilephone);
prop[1].wFlags = 0;
prop[1].wLenData = 0;

prop[2].propid = MAKELONG(CEVT_LPWSTR,HomeTel);
prop[2].val.lpwstr = ConvertToUnicodeFromUtf8( ContactVector[i].homephone);
prop[2].wFlags = 0;
prop[2].wLenData = 0;

prop[3].propid =MAKELONG(CEVT_LPWSTR,HomeAddr) ;
prop[3].val.lpwstr = ConvertToUnicodeFromUtf8(ContactVector[i].homeaddress);
prop[3].wFlags = 0;
prop[3].wLenData = 0;

prop[4].propid = MAKELONG(CEVT_LPWSTR,Company);
prop[4].val.lpwstr = ConvertToUnicodeFromUtf8(ContactVector[i].company);
prop[4].wFlags = 0;
prop[4].wLenData = 0;

prop[5].propid = MAKELONG(CEVT_FILETIME,Birthday);
prop[5].val.filetime = DeCodeSystemTimeToFileTime(ContactVector[i].birthday); // 解码SystemTime 格式:yyyy-mm-dd
prop[5].wFlags = 0;
prop[5].wLenData = 0;

prop[6].propid = MAKELONG(CEVT_LPWSTR,Email);
prop[6].val.lpwstr = ConvertToUnicodeFromUtf8(ContactVector[i].email);
prop[6].wFlags = 0;
prop[6].wLenData = 0;

prop[7].propid = MAKELONG(CEVT_LPWSTR,WorkTel);
prop[7].val.lpwstr = ConvertToUnicodeFromUtf8(ContactVector[i].workphone);
prop[7].wFlags = 0;
prop[7].wLenData = 0;


oid = CeEdbWriteRecordProps(hDatabase,0,8,prop);



结果



请问我哪里错了?应该怎么改
Firstname这些类似的数据应该是BSTR类型的。SysAllocString来赋值。
建议用POOM来完成这些类似的功能,比操作数据库要简单。
赋值数据是BSTR类型的,数据类型没问题

我是在PC端写入手机

写数据库的时候必须要每一个字段都得赋值吗?而且还得按顺序? 不用吧?
不需要。
那用我这个方法应该怎么做? 我哪里出错了?
TrPbItem ptmp;
创建的时候清下零 ZeroMemory 
我觉得 
strcpy(ptmp2.company,"");
有些问题,这样用会导致不可预测的错误,哈哈。。。菜鸟型回帖。
关注下,帮顶。
跟着学习了。
我现在一次只写一个属性

for(int j ;j<8;j++)
CeEdbWriteRecordProps(hDatabase,oid,1,&prop[j]);

这个样一个一个的往里写能正确写入,这样效率低,而且肯定不是正规的方法
CEPROPVAL prop[8]后也把prop清一下零,然后打个断点看看执行完这一句:
prop[4].propid = MAKELONG(CEVT_LPWSTR,Company);

propid得到的值是不是EDB的联系人数据库的公司字段的propid
回5楼8楼  ,不是这个原因
学习一下EDB
还有没有人能提供正确的方法了?如果没有就要结贴了 啊

VB的WinForm程序转成浏览器端执行的控件的问题 一个XSLT转换的问题,比较难,困了我好久了. 用vb.net或vb做的ERP系统需要在两个城市連网(SQLSERVER数据库),是否可以像网络游戏那样,每次上线时到服务器上下载最新的资料,同时也可\0 紧急求救:有没有办法杳出SQL中的所有保留字? 无法连接MySql 服务器 Windows 下的 Apache 如何限制每个IP的线程数???????????????????????? IMP导入数据库, 卸载数据库的NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSE都是US7ASCII,.... 神啦,救救我吧(我已苦战四天了)!!!!!!!!!!!!!!!!!!!!!!!!! win2003下,无法卸载诺顿企业版客户端?分不够,可以再加。 还是问问触发器怎么弄? 又遇不能互访问题???xp---xp 请教怎么样做滚动信息啊 9.18了,不忘历史,华人团结起来.散分200,前10名有分. 如何利用JavaScript自动获取远程图片的尺寸? 程序中使用了哪些Api 如何知道! 放假了.散分! 提示错误:找不到类型或命名空间名称“ReportDocument”(我装了CrystalReport9.2) 这个递归如何实现呢?请教各位达人。 求关于用java开发软件的数据! cxGrid可否建立两层band? listview中项目的双击事件名称是什么? AT+CMGL没有返回问题 九一八散分 HTMLibrarian -- 用Visual Studio Express做的,源代码开放 急!已经弄了两天了! 提问:调试错误 怎么在DataGrid中显示图片文件???? 用vb.net或vb做的ERP系统需要在两个城市連网(SQLSERVER数据库),在不改动编程语言前提下怎样实现网络数据共享?怎样具体实现? 什么时候才能访问窗口控件的handle属性? DataSet 里的内容显示,每八个记录就换一次行,如何实现?