d6+ado+sqlserver2000+instead of 类型触发器(100分)

我试过之后,发现问题如下:
虽然你在sqlserver客户端查询分析器里向v_khdafl表里添加数据很正常
便你用企业管理器直接向视图里添加记录里,就出错了!
不知你有没有发现!
我的建议如下:
1。更改视图查询语句为:
select kk.dadh,kk.xh,kk.spbh,sp.spmc,[red]KK.spbh1 [/red]from sp,khdafl kk where kk.spbh=sp.spbh
2.在DELPHI中用ADODATASET控件时,在BEFOREPOST事件中
加入:
adodataset1.FieldByName('spbh1').AsString:=adodataset1.FieldByName('spbh').AsString;
即可!


 
To sdhxdjw:
先谢谢你的答复。

1:何来的 KK.spbh1 ?
2:按照你的写法,在TADOdataset中添加一条纪录,然后提交,DELPHI就不会自动向两个基表中
各发送一个insert 命令吗,而是向视图中添加一条纪录?
 
问题没有解决,分平分了吧
如果谁能解决,另有1000分相送
 
对不起,近来时间比较忙!没有对你的问题及时回答!
1。KK。SPBH1实际上就是SPPH,是我在调试的时候为了区分所加的!
2。按照我的写法,在TADOdataset中添加一条纪录,然后提交,
DELPHI就也会自动向两个基表中!(已测试过)
不过,你可以更改ADO的动态属性,由于时间紧,我考贝原文(ADO编程资料),你看看:
Unique Table、Unique Schema、Unique Catalog 属性 — 动态

[red]使用户能够直接控制在通过对多个基本表执行 JOIN 操所得到的 Recordset 中的特定基本表的修改。 [/red]
Unique Table 指定一个允许进行更新、插入和删除的基本表的名称。


Unique Schema 指定模式,即表的所有者的名称。


Unique Catalog 指定目录,即包含表的数据库的名称。
设置和返回值

设置或返回字符串值,该值是表、模式或目录的名称。

说明

所要的基本表通过其目录、模式和表名唯一标识。设置 Unique Table 属性后,可使用 Unique Schema 或 Unique Catalog 属性的值查找基本表。在设置 Unique Table 属性之前需要设置 Unique Schema 和 Unique Catalog 属性的其中一个属性或同时设置两个属性,但这不是必须的。

Unique Table 的主键被用作整个 Recordset 的主键。该键可用于任何需要主键的方法。

设置 Unique Table 后,AddNew、Delete、Resync、Update 和 UpdateBatch 方法只能影响到所命名的表。

如果找不到唯一的基本表,将出现运行时错误。

当把 CursorLocation 属性设置为 adUseClient 时,这些动态属性均被追加到 Recordset 对象的 Properties 集合中。

测试通过之后,不要忘了说一声!
 
To sdhxdjw:
非常感谢你的热心帮助!
你说的解决问题的方法并不是我的本意,我是想利用instead of
触发器来完成对所有关联表当中的几个表或者是数据库中的其他表进行操作。
视图主要是用来在前端录入数据的,然后根据视图中的数据在数据库中
instead of 用触发器完成对相关表的更新及数据的一致性检查等!
现在最好能有什么办法禁止ADO做这种智能解析,只是把视图当作一个表看待就好了。
不管怎么样,很是非常感谢你,祝你好运!

 
顶部