ADO 更新时老是不成功这是什么原因?(在线等)
str= "update testinfo set projectname= ' "+frmProjectmanage-> edtProjectname-> Text + " ', testpeoplename= ' "+frmProjectmanage-> edttestpeople-> Text+ " 'where projectname= ' "+prjname+ " ' ";
fmanage-> UpdateFileinfor(str);
str= "update errorpottable set projectname= ' "+frmProjectmanage-> edtProjectname-> Text+ " 'where projectname= ' "+prjname+ " ' ";
fmanage-> UpdateFileinfor(str);
void FileManage::UpdateFileinfor(String updtstr)
{
try
{
adoquer-> SQL-> Clear();
adoquer-> SQL-> Add(updtstr);
adoquer-> ExecSQL();
if(adoquer-> RowsAffected> =1)
{
// ShowMessage( "记录修改成功! ");
}
else
{
ShowMessage( "记录修改过程中出现问题,未能修改成功! ");
}
// adoquer-> Refresh();
adoquer-> Close();
}
catch (Exception &exception)
{
ShowMessage( "对不起,记录修改失败! ") ;
}
catch (...)
{
try
{
throw Exception( " ");
}
catch (Exception &exception)
{
Application-> ShowException(&exception);
}
}
}
问题一: 有时第一个更新成功,有时都不成功
问题二: 如果加上adoquer-> Refresh();
则会报错 "cannot perform this operation closed dataset "
问题三: 弱弱的问一下 Refresh();具体有什么用??
[解决办法]
问题一:
你的更新成功和不成功是靠更新的行数来判断的,所以用来更新的sql语句很重要,而你用的update语句是靠字符串 连接组成的,这种方式很不好,如果里面有特殊字符或者保留字的话,就有可能更新失败,所以最好选用用paramter这种方式来更新.具体你看一下帮助.
例如:
str= "update testinfo set projectname=:pro ";
SQLQuery1-> ParamByName( "pro ")-> AsString = frmProjectmanage-> edtProjectname-> Text ;
问题二,三:
用Refresh这个方法,这是用来得到数据集的最新数据,而你的sql语句没有返回数据集,当然有错误了.