开发环境:delphi 5 + wind2000 
有个表basetable(字段a,b,c),针对此表有个视图viewtable(只能看到a,b),并为此视图建立个触发器,如下:
CREATE      TRIGGER InsteadTrigger on [dbo].[viewtable] 
INSTEAD OF INSERT
AS
BEGIN
 INSERT INTO basetable
       SELECT a,b,'wc'
       FROM inserted
end
(这样做的目的是让只针对视图操作,把表隐藏起来);
然后在delphi里,adodataset自然就是从视图里操作数据了;
那现在有个问题,新增记录的时候,如果用append,然后post,发现真正的basetable表里的字段c的值是空,而不是预料的“wc”。我用sqlserver的事件探查器看了下,发现sql 语句是直接针对表的插入操作了,前面多了个 prepare相关的存储过程;但是如果用insert语句的话,就会执行视图上的那个触发器了。另外在sqlserver的查询分析器里执行都是正常的,我怀疑是delphi的ado数据控件有问题(已经升级了呀)

解决方案 »

  1.   

    d5 的ado是有比較多的bug, 要陞級的
      

  2.   

    我已经运行了:d5adoupdate2.exe,还有更高版本的么?
      

  3.   

    我有新建一个程序,结果就是如果用 append + post 就绕过了此 触发器;用insert into 的话就会执行此触发器
      

  4.   

    ADO在处理视图触发器是有问题的,建议在表上建触发器
      

  5.   

    to helodd(真可爱):
       你以前也有碰到过此类问题么?但我只能在视图上建立触发器(表被隔离开了)
      

  6.   

    我的解决办法就是在表上建了触发器,而视图的多表联合查询加之ADO又说具备JOIN语句的处理能力(对视图表进行独立的处理),可能就是在这里出错的, 但解决办没有想过,就用了简单的办法做了