执行SQL语句错误

执行SQL语句异常以下这个方法有什么问题吗?//---------------------------------bool TForm1::Update(Ansi

执行SQL语句异常
以下这个方法有什么问题吗?

//---------------------------------
bool TForm1::Update(AnsiString str)
{
  int res ;

  if ( this->ADOQuery1->Active ) {

  this->ADOQuery1->Close() ;

  }

  try {

  this->ADOQuery1->SQL->Clear() ;

  this->ADOQuery1->SQL->Add(str) ;

  res = this->ADOQuery1->ExecSQL() ;

  this->ADOQuery1->Open() ;

  return res > 0 ; //SQL语句正确并且执行成功,当却出异常?

  }
  catch ( ... ) {

  ShowMessage("异常");

  return false ;

  }

}

[解决办法]

探讨
  int res ;

... 
 
    res = this->ADOQuery1->ExecSQL() ;

    this->ADOQuery1->Open() ;

    return res > 0 ; //SQL语句正确并且执行成功,当却出异常?

...
}

[解决办法]
ADOQuery1->ExecSQL()与ADOQuery1->Open()不要同时出现,这些是由SQL语句确定的。

ExecSQL()没有返回值,如果你是在记录集有记录时返回真值,这样的写法并不好,在SQL语句中用查询查找出符合条件的记录条数,Select Count(*) As num From Table1 Where "条件"。根据Query1->FieldByName("num")->AsInteger的值判断返回的值。
[解决办法]
探讨
    res = this->ADOQuery1->ExecSQL() ;

    this->ADOQuery1->Open() ;