首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

ADO 更新时老是不成功这是什么原因?()

2012-02-08 
ADO 更新时老是不成功这是什么原因?(在线等)str updatetestinfosetprojectname+frmProjectmanage- ed

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语句没有返回数据集,当然有错误了.

热点排行