我是mfc的新手,最近在做课程设计!在做一个修改模块出问题了,我是创建的列表控件的,当点击列表的记录时,记录中的字段各自对应到相应的编辑框中然后修改,保存到原先点击的记录中去!但是为什么不行啊,代码是这样的:
void CMyDlgModify::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
UpdateData(true);
pos=m_MlistCtl.GetSelectionMark();
m_Mzgbh=m_MlistCtl.GetItemText(pos,0);
m_Myear=m_MlistCtl.GetItemText(pos,1);
    m_Mmonth=m_MlistCtl.GetItemText(pos,2);
m_Mdata=m_MlistCtl.GetItemText(pos,3);
    m_Mxm=m_MlistCtl.GetItemText(pos,4);
m_Mjbgz=m_MlistCtl.GetItemText(pos,5);
    m_Myjgz=m_MlistCtl.GetItemText(pos,6);
UpdateData(false);
*pResult = 0;
}void CMyDlgModify::OnOK() 
{
// TODO: Add extra validation here
    UpdateData(true);
    CMyADOConn m_MyAdoConn;
m_MyAdoConn.OnInitADOConn();
_bstr_t sql;
sql = "select*from 职工个人工资表";
_RecordsetPtr m_pRecordset;
    m_pRecordset=m_MyAdoConn.GetRecordSet(sql);
try
{
    m_pRecordset->Move((long)pos,vtMissing);
    m_pRecordset->PutCollect("职工编号",(_bstr_t)m_Mzgbh);
m_pRecordset->PutCollect("年份",(_bstr_t)m_Myear);
m_pRecordset->PutCollect("月份",(_bstr_t)m_Mmonth);
m_pRecordset->PutCollect("输入日期",(_bstr_t)m_Mdata);
m_pRecordset->PutCollect("姓名",(_bstr_t)m_Mxm);
m_pRecordset->PutCollect("基本工资",(_bstr_t)m_Mjbgz);
m_pRecordset->PutCollect("业绩工资",(_bstr_t)m_Myjgz);
m_pRecordset->Update();
    m_MyAdoConn.ExitConnect();
}
可是不行啊!更新之后记录会替换掉别的记录!
求解答啊!

解决方案 »

  1.   

    UpdateData通常这样用:
    UpdateData(FALSE);
    更新数据
    UpdateData(TRUE); 
      

  2.   

     在Select语句里,加入限制条件,例如where id='',不知道这样是不是可以。
      

  3.   

    如果刚开始是UpdateData(false) 点击记录 数据是显示不出到对话框的编辑框的!
      

  4.   


    没说清楚,我说的时CListCtrl.UpdateData。
      

  5.   

    这个pos 值有问题,你从OnClickList事件中获取
    但是要更新的数据行和pos值不一致
    修改方法
    1。在OnClickList事件中获取点击的行数据主键 比如 zgbh = '111'
    2。OnOK 
      事件中 语句这么写
       select*from 职工个人工资表 where zgbh  = '111'
      
      
      

  6.   

    不过要是用pos值定位做?那要怎么弄呢