close;
                  sql.Clear;
                  sql.Add('update GoodsStore set RestNum = RestNum + :InputNum ,TotalNum = TotalNum + :InputNum  where GoodsId = :GoodsId ');
                  Parameters.ParamByName('InputNum').Value := ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').NewValue - ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').OldValue;
                  Parameters.ParamByName('GoodsId').Value := ModifyDBGrid.DataSource.DataSet.FieldByName('GoodsId').OldValue;
                  ExecSQL;sql语句如上,为什么用了同名参数时,比如:set RestNum = RestNum + :InputNum ,TotalNum = TotalNum + :InputNum,则执行的时候出现运行错误提示,不能将null赋值给totalnum,难道只有在RestNum = RestNum + :InputNum 这个语句时,inputnum才是赋值了的,第二个TotalNum = TotalNum + :InputNum语句中的inputnum的值为null?? 为什么是这样的呢?实现这个参数赋值的机制是什么呢?

解决方案 »

  1.   

    不能有同名参数,我遇到过的,改名就OK了
    sql.Clear;
    sql.Add('update GoodsStore set RestNum = RestNum + :InputNum1 ,TotalNum = TotalNum  + :InputNum2  where GoodsId = :GoodsId ');
    Parameters.ParamByName('InputNum1').Value := ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').NewValue - ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').OldValue;
    Parameters.ParamByName('InputNum2').Value := ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').NewValue - ModifyDBGrid.DataSource.DataSet.FieldByName('InputNum').OldValue;
     Parameters.ParamByName('GoodsId').Value := ModifyDBGrid.DataSource.DataSet.FieldByName('GoodsId').OldValue;
     ExecSQL;
      

  2.   

    我知道怎么解决这个问题,
    但是我想知道的是为什么不能用同名参数,,,
    以及adoquery进行传递的机制是什么,