百思不得其解,倾力求助(200分)

  • 主题发起人 主题发起人 xieliang
  • 开始时间 开始时间
X

xieliang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个入库单模块,入库单包含了两个表的数据sx(属性表,主表)、fy(费用表),两表
通过字段zdbh(制单编号)关联,我在sx表AferInsert事件里让fy.zdbh也自动增加,可是在sx表
的BeforeCancel或AfterCancel事件却无法让fy表新增的记录取消!!!,必须直接点击dbNavigator(fy)
的取消键(隐藏后只调用事件还不行),为什么?,注意,由于界面的原因我都是通过sx表的dbNavigator来实现的
 
这样不好,无法保持数据的一致性
 
可是,数据库设计是这样的,因为sx表和fy表的字段已经相当多了
 
可否用触发器来实现而不在程序中实现?
 
建议用触发器或存储过程,保证数据统一
 
谁能告诉我怎么写吗,提供一点主要代码
 
必须直接点击dbNavigator(fy)的取消键
那你就调用dbNavigator(fy)的取消键,我喜欢dbNavigator控件,你可以这样:
dbNavigator1.btnclick(nbcancel);//btnclick方法代码及不清了,
 
在属性表sx中创建触发器

create trigger TRIGGER_NAME on sx
for delete
as
delete from fy where zdbh in (select distinct zdbh from deleted)

你如果用sqlserver他会给你触发器的框架,添sql语句就行了
 
你把fy.zdbh自动增加的程序写在AFTERPOST事件中可以解决这个问题。
 
建议使用触发器
 
使用触发器是最好的方法
 
to houxdd:
由于数据库是这样设计的:sx.zdbh如没保存或不存在,fy.zdbh就保存不
进去,而取消时又要先取消fy.zdbh.再取消sx.zdbh。你说的我试过,但是当费用表的那些输入
框失去焦点时,也就是当你触发sx.cancel时,费用表已经保存了
 
to fatalexception:
框架我已知道,谢谢。还有在增加,删除事件里我还可以在程序中做到同步,问题是取消,对取消事件好象并不触发
你所写的啊
 
用事务处理呀。
 
荷塘新月的办法你试了吗?
“你把fy.zdbh自动增加的程序写在AFTERPOST事件中可以解决这个问题”
我感觉非常好,解决得正点。
 
fatalexception说的我已试过谢谢。其实在关联表里(fy.zdbh-->sx.zdbh)当sx.zdbh新增时
fy.zdbh会自动增加的(可以在NewRecord Event)不过我发现了一个新问题:不知道在存储过程
里和几种判断结果可不可分别返回给程序?怎么做??
 
你的意思是说存储过程返回多个返回值吗?有个办法:用select自己造一个数据集返回,例如
select xxxx as A, xxxx as B, xxxx as C
好象有些搞笑啊,不过管用,如果别的办法不适用就可以用这个。
 
后退
顶部