vc6.0+sql2000修改记录没有达到预期的效果

Jason_YF 2012-05-12 01:37:19
我在修改记录的时候编写了如下代码,运行没什么问题,但没有达到预期的效果,所以向大家请教一下:
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);

运行修改后结果是我所要修改的记录(比如第二条记录)没有被修改,而是第一条被修改成了修改后的数据;如果修改的是第一记录,则能达到预期效果,希望大家能帮我分析一下是什么原因,如何修改?
...全文
53 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason_YF 2012-05-12
  • 打赏
  • 举报
回复
OK,按照大家的答复,通过设置一个主键后,确实能够解决上述提到的问题,但是点击添加后每次都是最后一条记录又被重复显示了一遍,再次运行后才会正确显示,
向立天 2012-05-12
  • 打赏
  • 举报
回复
数据库里的数据是不能没有主键的
也就是不能没有唯一标识
否则你执行操作的时候数据库引擎怎么知道你要操作谁
jiuchang 2012-05-12
  • 打赏
  • 举报
回复
数据库需要一个标识来识别你要处理的是哪一条记录,通常就是用主键来标识的
如果你不指定修改的是哪一条记录,默认处理的就是第一条吧
Jason_YF 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

是不是把主键搞错了,导致修改的一直是第一条
[/Quote]
问题是我没有设置主键的,这个主键存在什么样的关系呢?
jiuchang 2012-05-12
  • 打赏
  • 举报
回复
是不是把主键搞错了,导致修改的一直是第一条

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧