CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

数据库异常,高手救命

楼主jimi5013(吉米鱼)2005-08-03 21:04:31 在 VC/MFC / 数据库 提问

我用的是Recordset类连接Access数据库,程序要求我的机位总数可设(每个机位对应数据库中一条记录)。  
          现在出现这种异常:当我在程序中设定64个机位时,即访问整个表(64条记录),将各条记录值都设定好了;然后有时需要设定较少机位(譬如只用32个,那么只访问前32条记录),也没什么异常。但当我再恢复成64个机位后,发现33—64号机位原来设定好的值全部被清空了,数值项全被清为零,字符串项被清空没有文字。  
          有时更甚的是,当在程序中设定1—32号记录时,在数据库表中却给记录到了33—64的对应记录上;而33—64却对应着表中的1—32号记录。请问哪位高手遇到过这种情况,该如何解决啊?  
          我的这个软件马上就要交了,但数据库连接总出问题,请务必帮帮我吧!!!拜谢了先!!!  
  问题点数:60、回复次数:5Top

1 楼dirdirdir3(风)回复于 2005-08-03 21:15:53 得分 30

每次操作前都要把数据表指针移动到第一个那里去啊Top

2 楼saliors(正在学习中)回复于 2005-08-04 07:55:06 得分 10

把你的程序操作数据库部分程序贴一下看看。Top

3 楼qiuxiangyong(qxy)回复于 2005-08-04 08:59:59 得分 20

你不是把“机位”作关键字吗?每次写入或者读取的时候按照这个key就可以了呀Top

4 楼jimi5013(吉米鱼)回复于 2005-08-04 10:03:24 得分 0

//构造函数  
  CData::CData()  
  {  
  for(int   i=0;i<32;i++)  
  {  
      m_MachineNumber[i]=i+1;//机位号  
  }  
   
  if(!this->GetData("MachineNumber   >0"))  
  AfxMessageBox("Error   when   get   data   from   DB!");//MachineNumber是表的主键  
                                                                                                                                  //是一个自动增量  
  }  
  //从数据库读取数据  
  BOOL   CData::GetData(CString   sql)  
  {  
  CUserRecordSet   rs;  
  try  
  {  
   
  if(rs.IsOpen())  
  rs.Close();  
   
  rs.m_strFilter=sql;//过滤条件  
                                                     
  rs.Open(CRecordset::snapshot,NULL,CRecordset::none);  
   
  for(int   i=0;i<32;i++)  
  {  
  m_MachineNumber[i]=rs.m_MachineNumber;//机位号  
  m_SensorNumber[i]=rs.m_SensorNumber;//传感器号  
  m_nUlimit[i]=rs.m_UnitUpperLimit;//单位机上限  
  m_nLlimit[i]=rs.m_UnitLowerLimit;//单位机下限  
  m_sState[i]=rs.m_SensorState;  
  rs.MoveNext();  
  }  
   
  if(rs.IsOpen())  
  rs.Close();  
   
  return   true;  
   
  }  
  catch(CDBException   *e)  
  {  
  AfxMessageBox(e->ReportError());  
  return   false;  
  }  
  }  
  //更新数据库  
  BOOL   CData::UpdateData()  
  {  
  CUserRecordSet   rs;  
  try  
  {  
  if(rs.IsOpen())  
  rs.Close();  
   
  rs.Open(CRecordset::snapshot,NULL,CRecordset::none);  
             
                      for(int   i=0;i<32;i++)  
  {  
  //编辑该条记录内容  
                                                        rs.Edit();  
  rs.m_MachineNumber=m_MachineNumber[i];  
  rs.m_SensorNumber=m_SensorNumber[i];  
  rs.m_UnitUpperLimit=m_nUlimit[i];  
  rs.m_UnitLowerLimit=m_nLlimit[i];  
                                                        rs.m_SensorState=m_sState[i];  
   
    //先判断当前是否能够进行更新操作  
          if(rs.CanUpdate())  
            rs.Update();  
   
  rs.MoveNext();  
  }  
   
  if(rs.IsOpen())  
  rs.Close();  
   
  return   true;  
  }  
  catch(CDBException   *e)  
  {  
  AfxMessageBox(e->ReportError());  
  return   false;  
  }  
  }  
  以上是我的源码,还请楼上高手指教Top

5 楼jimi5013(吉米鱼)回复于 2005-08-04 10:07:27 得分 0

//构造函数  
  CData::CData()  
  {  
            for(int   i=0;i<32;i++)  
            {  
      m_MachineNumber[i]=i+1;//机位号  
            }  
   
          if(!this->GetData("MachineNumber   >0"))  
  AfxMessageBox("Error   when   get   data   from   DB!");//MachineNumber是表的主键  
                                                                                                              //是一个自动增量  
  }  
  //从数据库读取数据  
  BOOL   CData::GetData(CString   sql)  
  {  
  CUserRecordSet   rs;  
  try  
  {  
  if(rs.IsOpen())  
            rs.Close();  
   
  rs.m_strFilter=sql;//过滤条件  
                                                     
  rs.Open(CRecordset::snapshot,NULL,CRecordset::none);  
   
  for(int   i=0;i<32;i++)  
  {  
  m_MachineNumber[i]=rs.m_MachineNumber;//机位号  
  m_SensorNumber[i]=rs.m_SensorNumber;//传感器号  
  m_nUlimit[i]=rs.m_UnitUpperLimit;//单位机上限  
  m_nLlimit[i]=rs.m_UnitLowerLimit;//单位机下限  
  m_sState[i]=rs.m_SensorState;  
  rs.MoveNext();  
  }  
   
  if(rs.IsOpen())  
  rs.Close();  
   
  return   true;  
   
  }  
  catch(CDBException   *e)  
  {  
  AfxMessageBox(e->ReportError());  
  return   false;  
  }  
  }  
   
  //更新数据库  
  BOOL   CData::UpdateData()  
  {  
  CUserRecordSet   rs;  
  try  
  {  
                    if(rs.IsOpen())  
  rs.Close();  
   
  rs.Open(CRecordset::snapshot,NULL,CRecordset::none);  
             
                      for(int   i=0;i<32;i++)  
  {  
  //编辑该条记录内容  
                                                        rs.Edit();  
  rs.m_MachineNumber=m_MachineNumber[i];  
  rs.m_SensorNumber=m_SensorNumber[i];  
  rs.m_UnitUpperLimit=m_nUlimit[i];  
  rs.m_UnitLowerLimit=m_nLlimit[i];  
                                                        rs.m_SensorState=m_sState[i];  
   
    //先判断当前是否能够进行更新操作  
          if(rs.CanUpdate())  
            rs.Update();  
   
  rs.MoveNext();  
  }  
   
  if(rs.IsOpen())  
  rs.Close();  
   
  return   true;  
  }  
  catch(CDBException   *e)  
  {  
  AfxMessageBox(e->ReportError());  
  return   false;  
  }  
  }  
  不好意思,上面的格式太乱,我重发Top

相关问题

  • 如何处理数据库异常
  • 关于数据库的异常查询
  • 数据库连接异常问题
  • 数据库的异常处理
  • (急)数据库异常(100分)!
  • 数据库连接的异常问题
  • 连接数据库异常问题
  • 紧急求救:数据库异常
  • 数据库抛出异常,(急救)
  • 数据库连接异常中断 help~~~

关键词

  • 数据库
  • sql
  • null
  • 机位
  • crecordset
  • cuserrecordset
  • machinenumber
  • cdata
  • 记录
  • rs

得分解答快速导航

  • 帖主:jimi5013
  • dirdirdir3
  • saliors
  • qiuxiangyong

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo