高手帮看看代码
同一表中将编号和名称改了,生成新的记录,若编号重复,则删掉原记录
问题是编号重复时,记录能够删除掉,但加记录时说 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



