多表視圖的更新問題﹗﹗﹗ ( 积分: 200 )

  • 主题发起人 主题发起人 liuxiangsoft
  • 开始时间 开始时间
L

liuxiangsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
多表視圖的更新問題﹗﹗﹗
我這次嘗試改用這三個控件來取數﹕cds﹐dsp。adoq
其中cds的provider指定dsp
dsp的dataset指定adoq
當我指定adoq的sql后﹐激活cds﹐取得數據后﹐
更新則成了問題﹐我從視圖取數﹐視圖是由多個表組成的﹐
而此時的數據回添我是用
CDS.applyupdate(Delta,-1,merror)
來實現的﹐
所以﹐當多表更新的時候﹐就出現了錯誤﹐
在多表視圖的情況下使用applyupdate如何才能正確的更新呢?
 
多表視圖的更新問題﹗﹗﹗
我這次嘗試改用這三個控件來取數﹕cds﹐dsp。adoq
其中cds的provider指定dsp
dsp的dataset指定adoq
當我指定adoq的sql后﹐激活cds﹐取得數據后﹐
更新則成了問題﹐我從視圖取數﹐視圖是由多個表組成的﹐
而此時的數據回添我是用
CDS.applyupdate(Delta,-1,merror)
來實現的﹐
所以﹐當多表更新的時候﹐就出現了錯誤﹐
在多表視圖的情況下使用applyupdate如何才能正確的更新呢?
 
参见:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4771
(在中间层通过自定义存储过程更新数据库)管它数据来自视图还是存储过程或其它,想怎么更新就怎么更新
将:
if VarIsEmpty(DeltaDS.FieldByName(FieldName).NewValue) then
sp_pub_ref.Parameters.ParamByName(ParamName).Value := DeltaDS.FieldByName(FieldName).OldValue
else
sp_pub_ref.Parameters.ParamByName(ParamName).Value := DeltaDS.FieldByName(FieldName).NewValue;
换成:
if (VarIsEmpty(DeltaDS.FieldByName(FieldName).NewValue) and (UpdKind<>'Ins')) or (UpdKind='Del') then
sp_pub_ref.Parameters.ParamByName(ParamName).Value := DeltaDS.FieldByName(FieldName).OldValue
else
sp_pub_ref.Parameters.ParamByName(ParamName).Value := DeltaDS.FieldByName(FieldName).NewValue;
 
建議直接利用存儲過程或是sql語句來實現。
它也可以很方便的實現批量增加。
 
要另外寫單獨更新SQL語句或寫觸發器。 
 
后退
顶部