先查询,将查询结果显示在ListCtrl控件中,然后再选择某一条记录进行删除,结果删除的数据是数据库中该位置的数据,而不是查询结果该位置的数据。
比如说,数据库中总共有四个数据,分别是1,2,2,1.我先查询等于1的数据,然后ListCtrl控件中显示两条记录。如果我将第二条记录删除的话,结果实际删除的是数据库中第二个数据,也就是第一个等于2的数据。请问为什么呢?

解决方案 »

  1.   

    可以把所得到的数据在 recorset的位置 setitemdata 删除的时候把后面的列的data减1
      

  2.   

    List和数据库数据要有个映射关系,用Setitemdate(),用指针绑定两者到同一块地址,这样删除就不会出错
      

  3.   

    List和数据库数据要有个映射关系:
    (1)建立一个vector列表,保存将查询到的结果插入到列表控件中的索引,以及该条记录在数据库中的数据表中对应的主键值,比如Guid;
    struct ResIndexAndGuid
    {
    int index;
    std::string guid;
    }
    ......
    std::vector<ResIndexAndGuid> resIndexAndGuidList;(2)当查询到结果后将结果插入到List控件中时,使用SetItemDate()函数将index(index从0开始的整数)设为该行的data值,然后将index和Guid插入到resIndexAndGuidList列表中;
    (3)当我们要删除List控件中的某条记录,首先用GetItemDate()函数获取该条记录对应的index,然后到resIndexAndGuidList列表中去遍历,找到对应的Guid,最后用这个Guid去构建SQL语句去删除数据库中的记录就可以了。