VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1293|回复: 12

[求助] 关于数据库Update更新的问题

[复制链接]
71_avatar_middle
在线会员 发表于 2016-7-8 20:41:01 | 显示全部楼层 |阅读模式
3驿站币
各位大侠,小弟编写了一个数据库程序,在程序运行过程中修改数据库内对应行的数据,部分代码如下:
                        if(kucun.IsOpen())
                                kucun.Close();
                        kucun.Open(CRecordset::snapshot,NULL,CRecordset::none);
                        while(!kucun.IsEOF())
                        {
                                s=kucun.m_mingchen;
                                s.TrimRight();
                                if(s==m_list.GetItemText(i,1)&&kucun.m_id==m_list.GetItemText(i,0))
                                {
                                        kucun.Edit();
                                        kucun.m_shuliang=kucun.m_shuliang-(float)atof(m_list.GetItemText(i,2));
                                        kucun.Update();
                                        break;
                                }
                                kucun.MoveNext();
                        }
                        kucun.Close();
但是运行过程中提示“更新或删除未涉及任何数据行”,测试程序确已找到对应行,而且数据也修改过了,就是在执行Update()的时候错误。

求解!!!!!!!!!!!

最佳答案

查看完整内容

嗯, 好的, 解决了就好!




上一篇:HOOK ExitProcess 问题
下一篇:Replace替换问题
51_avatar_middle
online_admins 发表于 2016-7-8 20:41:02 | 显示全部楼层
zzw843 发表于 2016-7-17 19:39
现在暂时解决了,解决方法是将CRecordSet派生类CKuncun中的成员变量m_shuliang由原来的float改为了CStrin ...

嗯, 好的, 解决了就好!
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-9 08:43:59 | 显示全部楼层
大侠求解!!!!!
51_avatar_middle
online_admins 发表于 2016-7-11 17:08:07 | 显示全部楼层
kucun.Open(CRecordset::snapshot,NULL,CRecordset::none);
进行 Open 的时候有进行查询功能吗?有记录集返回吗?
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-12 08:03:48 | 显示全部楼层
Syc 发表于 2016-7-11 17:08
kucun.Open(CRecordset::snapshot,NULL,CRecordset::none);
进行 Open 的时候有进行查询功能吗?有记录集 ...

记录集应该是有,因为程序可以进入IF语句,数据也进行了修改,就是不能更新。
51_avatar_middle
online_admins 发表于 2016-7-12 18:12:30 | 显示全部楼层
zzw843 发表于 2016-7-12 08:03
记录集应该是有,因为程序可以进入IF语句,数据也进行了修改,就是不能更新。

单纯看你当前贴出来的这些代码,不知道记录集是从哪里获取的?
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-14 19:33:26 | 显示全部楼层
Syc 发表于 2016-7-12 18:12
单纯看你当前贴出来的这些代码,不知道记录集是从哪里获取的?

CCSKuncun kucun;
        CCSXSjilu xiaoshou;
        CString s,m_dingdan;
        m_dingdan="";
        CTime m_ddtime;
        m_ddtime=CTime::GetCurrentTime();
        int i,j;
        //float cha;
        j=m_list.GetItemCount();
        if(j==0)
                MessageBox("请选择货物!");
        else
        {
                if(xiaoshou.IsOpen())
                        xiaoshou.Close();
                xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none);
                s.Format("%04d%02d%02d",m_ddtime.GetYear(),m_ddtime.GetMonth(),m_ddtime.GetDay());
                i=0;
                while(!xiaoshou.IsEOF())
                {
                        if(xiaoshou.m_dingdan.Mid(0,8)==s)
                        {
                                if(m_dingdan!=xiaoshou.m_dingdan)
                                {
                                        i++;
                                        m_dingdan=xiaoshou.m_dingdan;
                                }
                        }
                        xiaoshou.MoveNext();
                }
                xiaoshou.Close();
                m_dingdan=s;
                s.Format("%03d",i);
                m_dingdan+=s;       
                for(i=0;i<j;i++)
                {
                        if(kucun.IsOpen())
                                kucun.Close();
                        kucun.Open(CRecordset::snapshot,NULL,CRecordset::none);
                        while(!kucun.IsEOF())
                        {
                                s=kucun.m_mingchen;
                                s.TrimRight();
                                if(s==m_list.GetItemText(i,1)&&kucun.m_id==m_list.GetItemText(i,0))
                                {
                                        kucun.Edit();
                                        kucun.m_shuliang=kucun.m_shuliang-(float)atof(m_list.GetItemText(i,2));
                                        kucun.Update();
                                        break;
                                }
                                kucun.MoveNext();
                        }
                        kucun.Close();
                        if(xiaoshou.IsOpen())
                            xiaoshou.Close();
                    xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none);
                        xiaoshou.AddNew();
                        xiaoshou.m_mingchen=m_list.GetItemText(i,1);
                        xiaoshou.m_id=m_list.GetItemText(i,0);
                        xiaoshou.m_jiezhangdanjia=xiaoshou.m_chushoudanjia=(float)atof(m_list.GetItemText(i,3));
                        xiaoshou.m_shuliang=(float)atof(m_list.GetItemText(i,2));
                        xiaoshou.m_danwei=m_list.GetItemText(i,4);
                        xiaoshou.m_yonghu=m_YONGHU;
                        xiaoshou.m_YNtuihuo=FALSE;
                        xiaoshou.m_maijia="无名";
                        xiaoshou.m_youfei=0;
                        xiaoshou.m_xiaoshouriqi=xiaoshou.m_jiezhangriqi=m_ddtime;
                        xiaoshou.m_yushouYN=FALSE;
                        xiaoshou.m_dingdan=m_dingdan;
                        xiaoshou.Update();
                        xiaoshou.Close();
                }
                m_list.DeleteAllItems();
                m_mingcheng=m_id=m_danwei="";
                m_shuliang=m_danjia=ZONGJIA=m_REKUCUN=0;
                m_zongjia.Format("总价:%.2f元",ZONGJIA);
                m_kucun.Format("库存:%.2f",m_REKUCUN);
                m_mingchengctrl.SetFocus();
                UpdateData(FALSE);
        }
51_avatar_middle
online_admins 发表于 2016-7-14 19:57:00 | 显示全部楼层
zzw843 发表于 2016-7-14 19:33
CCSKuncun kucun;
        CCSXSjilu xiaoshou;
        CString s,m_dingdan;

感觉 xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none); 第 2 个参数有问题,你写上相应的 Select 查询语句试试,看看能否 Update 成功
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-15 19:36:01 | 显示全部楼层
Syc 发表于 2016-7-14 19:57
感觉 xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none); 第 2 个参数有问题,你写上相应的 Se ...

我觉得是Update()函数的问题,因为在运行过程中,不是所有数据都不能更新,比如我存入了“苹果”和“桔子”两个数据,在更新的时候,“苹果”就失败了,“桔子”就成功了,很诡异…………
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-17 15:41:13 | 显示全部楼层
Syc 发表于 2016-7-14 19:57
感觉 xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none); 第 2 个参数有问题,你写上相应的 Se ...

找到原因了,不是程序的问题,是数据的问题,如果我保存时是整数就没问题,保存为小数就提示无法更新,解决中……
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-17 19:39:22 | 显示全部楼层
Syc 发表于 2016-7-14 19:57
感觉 xiaoshou.Open(CRecordset::snapshot,NULL,CRecordset::none); 第 2 个参数有问题,你写上相应的 Se ...

现在暂时解决了,解决方法是将CRecordSet派生类CKuncun中的成员变量m_shuliang由原来的float改为了CString,虽然在数据交换时CRecordSet提供了很多数据类型,但是添加类时自动生成的只有RFX_Text和RFX_Int两种,所以我发现Update()更新其他数据类型时会出错,改成这两种后现在运行正常。
71_avatar_middle
ico_lz  楼主| 发表于 2016-7-17 21:13:37 | 显示全部楼层
Syc 发表于 2016-7-17 20:46
嗯, 好的, 解决了就好!

这个如何结贴??
51_avatar_middle
online_admins 发表于 2016-7-17 21:26:12 | 显示全部楼层
zzw843 发表于 2016-7-17 21:13
这个如何结贴??

看到某一楼层的下面有个 "最佳答案" 的文字, 点击就可以啦
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-7-24 00:53

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表