我在修改记录的时候编写了如下代码,运行没什么问题,但没有达到预期的效果,所以向大家请教一下:
UpdateData();
CString sqlStr;
sqlStr.Format("select * from td_goods"); //载入数据库相关表的数据
td_goodsset2 = new CGoodsset(&((CSHOPApp*)AfxGetApp())->m_DB);
if(!td_goodsset2->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)) //调用Open函数查询数据源中的记录并建立记录集
{
AfxMessageBox("tb_goods表打开失败!");
}

    COleDateTime dt1,dt2;  
    dt1.ParseDateTime(m_producetime); 
    dt2.ParseDateTime(m_selldate);
    SYSTEMTIME st1,st2;  
    dt1.GetAsSystemTime(st1);
    dt2.GetAsSystemTime(st2);
    CTime   tm1(st1),tm2(st2);
td_goodsset2->Edit();
td_goodsset2->m_GoodsId = atol(m_goodsid);
td_goodsset2->m_Sort = m_types;
td_goodsset2->m_Name = m_goodsname;
td_goodsset2->m_Unit = m_unit;
td_goodsset2->m_Saleprice = m_saleprice;
td_goodsset2->m_Stockprice = m_storeprice;
td_goodsset2->m_Producetime = tm1; //(CTime)m_producetime;
td_goodsset2->m_Rebate = m_rebate;
td_goodsset2->m_Seriesnumber    = atol(m_number);
td_goodsset2->m_QuantityQT = tm2; //(CTime)m_selldate;
td_goodsset2->Update(); CString sgoodsid,sproducetime,squantityQT,sbuycount,sserisnumber;  
CTime tDate ,tData2; 
sgoodsid.Format("%d",td_goodsset2->m_GoodsId);
sserisnumber.Format("%d",td_goodsset2->m_Seriesnumber);
sbuycount.Format("%d",td_goodsset2->m_Buycount);
tDate = td_goodsset2->m_Producetime;
tData2 = td_goodsset2->m_QuantityQT;
squantityQT = tData2.Format("%m/%d/%y");
sproducetime =tDate.Format("%m/%d/%y"); 
m_goodsinflist.DeleteItem(number); //从数据源中删除位于指定索引位置的记录。
// td_goodsset2->Requery();
// DisplayRecord2();
// CString num ;
// num.Format("%d",number);
// MessageBox(num);
m_goodsinflist.InsertItem(number,sgoodsid,0);
m_goodsinflist.SetItemText(number,1,td_goodsset2->m_Sort);
m_goodsinflist.SetItemText(number,2,td_goodsset2->m_Name);
m_goodsinflist.SetItemText(number,3,td_goodsset2->m_Unit);
m_goodsinflist.SetItemText(number,4,td_goodsset2->m_Saleprice);
m_goodsinflist.SetItemText(number,5,td_goodsset2->m_Stockprice);
m_goodsinflist.SetItemText(number,6,td_goodsset2->m_Rebate);
m_goodsinflist.SetItemText(number,7,td_goodsset2->m_Producer);
m_goodsinflist.SetItemText(number,8,sproducetime);
m_goodsinflist.SetItemText(number,9,squantityQT);
m_goodsinflist.SetItemText(number,10,sserisnumber);
m_goodsinflist.SetItemText(number,11,sbuycount);运行修改后结果是我所要修改的记录(比如第二条记录)没有被修改,而是第一条被修改成了修改后的数据;如果修改的是第一记录,则能达到预期效果,希望大家能帮我分析一下是什么原因,如何修改?

解决方案 »

  1.   

    是不是把主键搞错了,导致修改的一直是第一条
      

  2.   

    问题是我没有设置主键的,这个主键存在什么样的关系呢?
      

  3.   

    数据库需要一个标识来识别你要处理的是哪一条记录,通常就是用主键来标识的
    如果你不指定修改的是哪一条记录,默认处理的就是第一条吧
      

  4.   

    数据库里的数据是不能没有主键的
    也就是不能没有唯一标识
    否则你执行操作的时候数据库引擎怎么知道你要操作谁
      

  5.   

    OK,按照大家的答复,通过设置一个主键后,确实能够解决上述提到的问题,但是点击添加后每次都是最后一条记录又被重复显示了一遍,再次运行后才会正确显示,