收录日期:2020/05/26 04:52:48 时间: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
还有没有人能提供正确的方法了?如果没有就要结贴了 啊

大家能不能帮我解决这样的问题? 急,簡單問題(在線等) Tprinter的问题 怎么实现坐标的转换 新学ASP.NET的问题 我觉得,给别人干不如自己搞个公司!有兴趣的进来看看!!!!!!11111 本人现在要学习网络安全知识,请那位大哥指一条路,找一个入口好好学习 JPanel的问题,高手快帮忙!!!(100分) 高手请来帮我解释一下这段程序是怎么执行的?!!!! 关于系统挂钩和数据回填,高手请进!! 紧急求助,关于RMI,高分相送!!!! ASP中如何弹出警告? 关于函数模板的问题 国人素质差到极点!!! IIS 求救,一个苦恼的问题! attribute & reflection 的价值何在? 新手再提问:又是关于MDI的问题 如何判断汉字与字符 本版版规 NT帐户的问题? 怎么在DBGrid窗体里删掉一行,不对数据库进行操作? rman vb6中函数重载需要怎样说明? 进入98自动打开C盘的窗口,怎么回事? 想在session失效得时候做一些事情 一个小小问题,希望各位高手作答(在线等待) 请问,如何不用ODBC调用DSN,而是直接连接ACCESS数据库??? !!!Linux下如何实现Modem的点对点拨号串口通信? 高分赠送加衷心感谢. 哥哥救命,关于office系列软件的菜单变得很慢了 有谁在用大型机汇编或COBOL编程的吗?谈谈感想好吗?