当前位置: 代码迷 >> VFP >> 唉,foxpro高手救小弟我
  详细解决方案

唉,foxpro高手救小弟我

热度:6080   发布时间:2013-02-26 00:00:00.0
唉,foxpro高手救我!
嗯,这样,我想为某个数据表建个触发器,该表一旦做update操作,就统计的cj列数据,对其中一行id为0的cj列更新为其他列的平均值。

操作:
1先在库中建了个存储过程
PROCEDURE Myupd()
 update bqks set cj=sum(cj)/count(*) where id<>0
end PROCEDURE 

2在命令窗口中执行了
CREATE TRIGGER ON bqks FOR UPDATE AS Myupd()




执行代码出错!!我晕,在sql server 中这样可没问题啊。fox我可是菜鸟,求高手帮忙

------解决方案--------------------------------------------------------
存储过程需要 数据库(DBC),自由表不支持
------解决方案--------------------------------------------------------
MODIFY procedure

PROCEDURE Myupd
update bqks set cj=(select sum(cj) from bqks)/(select count(*) from bqks) where id<>0
return .T.
ENDPROC

CREATE TRIGGER ON table1 FOR UPDATE AS Myupd()


------解决方案--------------------------------------------------------
楼主 是在DBC中吧?
建议不用VFP的DBC
------解决方案--------------------------------------------------------
2楼的代码试试吧,在VFP9下没有提示出错
------解决方案--------------------------------------------------------
提示什么?
------解决方案--------------------------------------------------------
探讨
vf6中通不过。我这是原来一个人留下的垃圾程序,没求和列,程序动不了,领导要报表求个加平均行...

------解决方案--------------------------------------------------------
SQL code
Create Database MyData.Dbc            && 建立一个数据库Create Table bqks.Dbf (Id i,cj i)    && 建立一个表Create Trigger On bqks For Update As Myupd()*-- vfp6.0Procedure Myupd()    Select Nvl(Avg(cj),0) As cj_avg Into Cursor t1 From bqks Where Id<>0    Update bqks Set cj=t1.cj_avg Where bqks.Id=0Endproc*-- vfp9.0*!*    Procedure Myupd()*!*        Update bqks Set cj=b.cj_avg From (Select Nvl(Avg(cj),0) As cj_avg From bqks Where Id<>0) b Where bqks.Id=0*!*    Endproc
------解决方案--------------------------------------------------------
用代码实现吧,OR 更换数据库