CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

高手帮看看代码

楼主boat2002w(渔舟)2003-09-01 15:47:05 在 C++ Builder / 基础类 提问

同一表中将编号和名称改了,生成新的记录,若编号重复,则删掉原记录  
  问题是编号重复时,记录能够删除掉,但加记录时说   ADOQuery3:cannot   perfor  
  this   operation   on   a   closed   dateset!  
  不知道是什么原因,帮忙,谢谢  
   
                                  ADOQuery1->Close();  
                                  ADOQuery1->SQL->Clear();  
                                  ADOQuery1->SQL->Add("select   *   from   "+tablename+"   where   工程编号='"+tempro->proid+"'");  
                                  ADOQuery1->Open();  
   
                                  ADOQuery3->Close();  
                                  ADOQuery3->SQL->Clear();  
                                  ADOQuery3->SQL->Add("select   *   from   "+tablename+"");  
                                  ADOQuery3->Open();  
   
                                  Opts.Clear();  
                                  Opts   <<   loPartialKey;  
   
                                  found=ADOQuery3->Locate("工程编号",   bh   ,   Opts);  
                                  if(found)  
                                  {  
                                                  if(Application->MessageBox("此工程已经存在!覆盖原工程吗?","提示信息",MB_YESNO)!=   IDYES)  
                                                  return;  
                                                  else  
                                                  {  
   
                                                                  ADOQuery3->SQL->Clear();  
                                                                  ADOQuery3->SQL->Add("delete   from   "+tablename+"   where   工程编号='"+bh+"'");  
                                                                  ADOQuery3->ExecSQL();  
                                                  }  
                                  }  
   
   
                                  ADOQuery3->Append();  
                                  ADOQuery3->Fields->Fields[0]->AsString=bh;  
                                  ADOQuery3->Fields->Fields[1]->AsString=Edit3->Text;  
                                  for(i=2;i<ADOQuery1->FieldCount;i++)  
                                  {ADOQuery3->Fields->Fields[i]=ADOQuery1->Fields->Fields[i];}    
   
   
                                  ADOQuery3->Post(); 问题点数:20、回复次数:6Top

1 楼gloom(苍狗白云)回复于 2003-09-01 15:55:36 得分 0

你是用ExecSQL()来删除记录的,ExecSQL运行后就关闭数据库了,  
  所以你再用ADOQuery3->Append是不能 成功的,你可以用  
  AppendQuery3->SQL->Text="Insert   into     table   (column1,column2,)   values(value1,valu2)";  
  AppendQuery3->ExecSQL();  
  来添加记录Top

2 楼boat2002w(渔舟)回复于 2003-09-01 16:08:48 得分 0

能不能改删除记录的语句?  
  有没有删除完毕后不关闭记录的?Top

3 楼pcclever(质子)回复于 2003-09-01 16:34:26 得分 0

 
                                                  else  
                                                  {  
   
                                                                  ADOQuery3->SQL->Clear();  
                                                                  ADOQuery3->SQL->Add("delete   from   "+tablename+"   where   工程编号='"+bh+"'");  
                                                                  ADOQuery3->ExecSQL();      
                                                  }  
                                  }  
   
   
                                  ADOQuery3->Close();     //增加这一句  
                                  ADOQuery3->Append();   //没有关闭就append当然会有问题  
   
                                  ADOQuery3->Fields->Fields[0]->AsString=bh;Top

4 楼boat2002w(渔舟)回复于 2003-09-01 17:49:56 得分 0

pcclever(质子)   (   )    
  我试了你的方法,但是不行,报错本来就是说dataset已经关闭,你再加上一句close不就还是关吗?  
  Top

5 楼boat2002w(渔舟)回复于 2003-09-02 11:29:27 得分 0

我将这一部分加了几句,  
   
  if(found)  
                                  {  
                                                  if(Application->MessageBox("此工程已经存在!覆盖原工程吗?","提示信息",MB_YESNO)!=   IDYES)  
                                                    return;  
                                                  else  
                                                  {  
   
                                                                  ADOQuery3->SQL->Clear();  
                                                                  ADOQuery3->SQL->Add("delete   from   "+tablename+"   where   工程编号='"+bh+"'");  
                                                                  ADOQuery3->ExecSQL();  
                                                  }  
                                  }  
  变为  
  if(found)  
                                  {  
                                                  if(Application->MessageBox("此工程已经存在!覆盖原工程吗?","提示信息",MB_YESNO)!=   IDYES)  
                                                  return;  
                                                  else  
                                                  {  
                                                                  ADOQuery3->Close();//新加  
                                                                  ADOQuery3->SQL->Clear();  
                                                                  ADOQuery3->SQL->Add("delete   from   "+tablename+"   where   工程编号='"+bh+"'");  
                                                                  ADOQuery3->ExecSQL();  
   
                                  ADOQuery3->Close();//新加  
                                  ADOQuery3->SQL->Clear();//新加  
                                  ADOQuery3->SQL->Add("select   *   from   "+tablename+"");//新加  
                                  ADOQuery3->Open();//新加  
   
                                                  }  
                                  }  
  问题解决,但我想知道原因以及其他的解决方法Top

6 楼gloom(苍狗白云)回复于 2003-09-03 09:46:40 得分 20

原因就是你不能操作已经关闭的数据表,你用  
                                  ADOQuery3->Close();//新加  
                                  ADOQuery3->SQL->Clear();//新加  
                                  ADOQuery3->SQL->Add("select   *   from   "+tablename+"");//新加  
                                  ADOQuery3->Open();//新加  
  就等于重新打开表了,这时就可以用Append来添加数据了,  
  其它方法?用Insert不行吗?你甚至可以将Insert写在Delete后面,只执行一次就可以了,即一次执行多条SQL语句。Top

相关问题

  • 帮我改代码!
  • 帮帮忙,看看代码
  • 代码注释??帮帮忙!
  • 帮我改改代码!
  • 帮我看以下代码
  • 帮忙看下代码?
  • 帮忙改一下代码?
  • 帮忙看一段代码!
  • 帮忙看段代码
  • 代码修改帮忙啊

关键词

  • adoquery3
  • execsql
  • bh
  • adoquery
  • tablename
  • clear
  • 记录
  • 工程
  • idyes
  • 删除

得分解答快速导航

  • 帖主:boat2002w
  • gloom

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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