void CMainDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_currentposition=pNMListView->iItem;

*pResult = 0;
}
void CMainDlg::OnDelete() 
{
// TODO: Add your control notification handler code here
m_student_list.DeleteItem(m_currentposition);

m_pRecordset->MoveFirst();
m_pRecordset->Move(m_currentposition);  
m_pRecordset->Delete(adAffectCurrent);  // 参数adAffectCurrent为删除当前记录
m_pRecordset->Update();
}
这是在一个对话框中做的数据库操作的,程序,
但是上面的代码很奇怪,比方说
我数据库中有20条记录,当我删除最后一条记录的时候,其实是删除的第十九条
记录,当我删除第十八条记录的时候,其实是删除的是第十九条,
m_pRecordset->MoveFirst(); 这句还不加不可以,不知道使什么问题
请帮忙

解决方案 »

  1.   

    Recordset 得Move 和ListCtrl中的Item他们的基准是不是都是以0开始?
      

  2.   

    pNMListView->iItem好象是以1为基准的吧,
      

  3.   

    pNMListView->iItem 的基准为0
    m_pRecordset->Move(m_currentposition);
    的 基准为1所以改为这样就可以了
    m_pRecordset->Move(m_currentposition+1);
      

  4.   

    pNMListView->iItem 的基准为1
    m_pRecordset->Move(m_currentposition);
    的 基准为0所以改为这样就可以了
    m_pRecordset->Move(m_currentposition-1);
      

  5.   

    我觉得这种删除的方法非常愚蠢,你应该这样,每一个list的item对应一个数据库的记录id,有一个对象表,删除的时候,由删除的iItem转换成记录id,然后凭借这个id再去删除数据库里的记录,iItem-->id, 然执行sql="Delete From mytable Where id="+id;这样即使是有翻页也不会有问题,准确无误。
      

  6.   

    arvid_gs(west) ( ) 信誉:100 
    那当我在删除最后一条记录的时候怎么删除的,它前一条的记录