当前位置:主页>delphi教程/企业管理软件> 文章内容

送分:求两表同步用ADO方式的实现???

发布时间:2010-01-20 | QQ免费站
1楼: 有两表 区域(区域名称) 分区(分区名称,所属区域) 其中 分区 表中的所属区域对应 区域 的区域名称,数据库为 sql2000 ,连接方式为 ADO,不能用外键更新。 想知道当区域名称变化时如何实时更新 分区 表的 所属区域 的值,实现二者同步,delphi刚学,请各位指点。(不用外键,不改表结构)

字串4

2楼: 回就送分

字串4

3楼: 你可以用触发器的,这是数据库的功能,不是Delphi的能力. 要用Delphi,你只好写代码进行更新了.
字串3

4楼: 如果用Delphi就在 区域 表AfterPost 事件处理。
字串2

5楼: 可以用触发器的 多谢楼上两位,不知触发器如何写,能给个示例吗? 看了帮助不太懂
字串2

6楼: 只能去看sql2000。那有例子 字串3

7楼: 触发器的写法就是SQL语句,找一下吧
字串4

8楼: 在《Delphl5.x ADO/MTS/CoM+高级程序设计篇》中的第二节中说master/detial时,就是以ADO来处理的,与你的要求一样。对你一定有帮助 字串2

9楼: 在sql服务器段写触发器。 给你一段示例: create trigger idchange1 on base_t after update,insert as if update(车辆自编号) BEGIN DECLARE @A_ID as nvarchar(18) DECLARE @B_ID as nvarchar(18) SELECT @A_ID=车辆自编号 FROM INSERTED SELECT @B_ID=车辆自编号 FROM DELETED UPDATE taxi_t SET taxi_t.车辆自编号=@A_ID WHERE taxi_t.车辆自编号=@B_ID UPDATE erjia_t SET erjia_t.车辆自编号=@A_ID WHERE erjia_t.车辆自编号=@B_ID end

字串9

10楼: 谢谢楼上各位 我试了zahahui 兄的方法,数据的确可以同步更新,但调用 post 时提示出错,出错信息为 raised exception class Edatabaseerror with message ‘Key column information is insufficient or incorrect.Too many rows were affected by update‘. 不知为何,未设触发器前运行正常,是那里需要设一下吗? 字串3

11楼: 沒有一一對應,也就是你改的一條紀錄,在令一個表有多條紀錄對應,觸發器常見錯誤, 觸發器要小心些用,效率不高,很容易很慢,能不用的儘量不要用,更不能隨便亂用 字串5

12楼: 如果用的话,post语句应该怎么写呢?或者怎么能忽略这个错误?

字串7

13楼: 其实我也是初学者,我就有个傻办法,只要设计修改区域我就修改分区表, 不过看仁兄这么麻烦,我觉得可能是表设计上应该可以优化一些 字串6

14楼: post?delphi里面的post?与这个无关 是触发器本身有问题,你写的触发器是不是修改了A表的某些字段,从本条记录 根据一些字段找B表的字段作为条件,找B的记录,你根据本记录的条件去B表 查询看看,是不是能找到多条记录,是的话就有问题了,要改成只能找到一条记录修改 如果实在是需要改多条,好像要用游标,一条一条改 你先把触发器关掉或者删掉试试看会不会报错,如果会就确定是触发器的问题 ps:我遇到过关闭触发器,还报错,好像触发器根本没有关闭,后来我删掉触发器才ok 所以我才会提到让你删了试试看,先这样搞,确定是触发器的问题再解决触发器 字串1

15楼: 去掉触发器运行正常 字串4

16楼: 触发器尽量不要使用。

字串2

17楼: to 神舟 運行正常就說明是觸發器的問題了,按我說的思路去改吧,hehe 不過再勸你一次,能不用就不用,我被那東西搞得頭大了很多 字串1

18楼: 游标不会用,我再试试吧 字串5

19楼: 最好不用触发器的说。还是修改一下表结构吧,有什么困难吗?

字串4

20楼: 多人接受答案了。 字串9