现在需要一个程序段!小弟一时不知如何下手来写!
程序要求如下:
delphi+SQLserver
程序设计
表:
T_Main,T_Detail
表结构:
T_Main:
-----------------------
d_ID varchar(16) null
d_Name varchar(50) null
d_des varchar(100) null
------------------------
T_Detail
-----------------------
d_ID varchar(16) not null 主键
d_Name varchar(50) not null
d_des varchar(100) null
d_f1 varchar(20) null
d_f2 varchar(20) null
d_f3 varchar(20) null
---------------------------
程序要求
建立一个用户操作窗口,用户可以进行对T_Detail表的增删改操作。
要求:对T_Detail表任何操作要通过事务处理方式,并且批量处理数据也就是updatebatch。对T_Detail的 增 删 改 操作,系统同时完成把T_Detail中d_ID,d_Name,d_des参数更新到T_Main中去(当然T_Main也是要updatebatch)。
举个例子
T_Detail中增加'001','setfocus','中国','中华人民共和国','中国人民'
那么加'001','setfocus','中国'到T_Main中去!
--------------------------------------
请尽量写一个完整的程序,请把数据库结构或者直接给我一个备份文件和程序源码发到[email protected]或者[email protected]中!
在此先感谢您对我的帮助!
程序要求如下:
delphi+SQLserver
程序设计
表:
T_Main,T_Detail
表结构:
T_Main:
-----------------------
d_ID varchar(16) null
d_Name varchar(50) null
d_des varchar(100) null
------------------------
T_Detail
-----------------------
d_ID varchar(16) not null 主键
d_Name varchar(50) not null
d_des varchar(100) null
d_f1 varchar(20) null
d_f2 varchar(20) null
d_f3 varchar(20) null
---------------------------
程序要求
建立一个用户操作窗口,用户可以进行对T_Detail表的增删改操作。
要求:对T_Detail表任何操作要通过事务处理方式,并且批量处理数据也就是updatebatch。对T_Detail的 增 删 改 操作,系统同时完成把T_Detail中d_ID,d_Name,d_des参数更新到T_Main中去(当然T_Main也是要updatebatch)。
举个例子
T_Detail中增加'001','setfocus','中国','中华人民共和国','中国人民'
那么加'001','setfocus','中国'到T_Main中去!
--------------------------------------
请尽量写一个完整的程序,请把数据库结构或者直接给我一个备份文件和程序源码发到[email protected]或者[email protected]中!
在此先感谢您对我的帮助!
解决方案 »
- 新手求教,如何在DBGrid插入首行,进行前期汇总。然后再总结。
- starluck你怎么还不行动啊
- 用TIdHTTP控件抓取这个网址的数据时,出现乱码
- width、Height使用的尺度
- 求助用ServerSocket如何对大于8k的数据包分组发送?
- dbgrideh如何显示多个字段的下拉列表?
- 在delphi7 中,如何让cxdbcombobox组件实现代码快速录入?
- 如何取得浮点型的小数点后前几位?
- 请问如何把一个是数据结构的变量存入数据库啊,内详!
- delphi webservice 问题
- 有用过RichView的朋友请进,看有没遇到这样一个源码级的控件错误。
- 关闭登陆窗口,打开主窗本代码怎么写?
也就是每次在对T_Detail表的 增 删 改 操作时,就要对T_Main表操作。用你的例子:
T_Detail中增加'001','setfocus','中国','中华人民共和国','中国人民'
那么加'001','setfocus','中国'到T_Main中去。前面要求把'001','setfocus','中国'各给一个变量
if 增加成功后 then
begin
增加到T_Main中去
end;
给你一个建议,这个问题如果你到MS-SQL的版块问的话,回答会更快。而且有具体的东西。
create trigger 名1 on t_detail
for insert
as
insert t_main
select d_id,d_name,d_des from inserted
where d_id not in (select d_id from t_main)
go
eg:删除触发器
create trigger 名2 on t_detail
for insert
as
delete t_main
where d_id in (select d_id from deleted)
eg:修改触发器
create trigger 名2 on t_detail
for update
as
update a set a.d_name = b.d_name,a.d_des = b.d_des
from t_main a
join inserted b on a.d_id = b.d_id
create table T_Main(
d_ID varchar(16) null,
d_Name varchar(50) null,
d_des varchar(100) null)create table T_Detail(
d_ID varchar(16) not null primary key,
d_Name varchar(50) not null,
d_des varchar(100) null,
d_f1 varchar(20) null,
d_f2 varchar(20) null,
d_f3 varchar(20) null)
go--T_Detail中增删除记录时,同步T_Main的触发器
create trigger t_process on T_Detail
for insert,update,delete
as
begin tran
delete T_Main
from T_Main a join deleted b on a.d_ID=b.d_ID
if @@error<>0 goto lb_err insert into T_Main(d_ID,d_Name,d_des)
select d_ID,d_Name,d_des from inserted
if @@error=0
commit tran
else goto lb_err
lb_err:
rollback tran
go
在记录更新前.开启事务
并用错误处理捕获错误.如果出错,回滚事务.
如果所有处理正确完成,提交事务.因为这样工作,触发器中的事务为内层事务
基于事务的嵌套处理规则.可以满足楼主的要求
create table t_main(d_ID varchar(16) null,
d_Name varchar(50) null,
d_des varchar(100) null
)
go
create table t_detail(d_ID varchar(16) not null primary key,
d_Name varchar(50) not null ,
d_des varchar(100) null,
d_f1 varchar(20) null,
d_f2 varchar(20) null,
d_f3 varchar(20) null
)
go
create trigger 名 on t_detail
for insert
as
insert t_main
select d_id,d_name,d_des from inserted
where d_id not in (select d_id from t_main)
go
insert t_detail values('001','focus','setfocus','中国','中华人民共和国','中国人民')
/* 没有用insert语句往t_main中加记录,以下显示结果 */
select * from t_main
/*
d_ID d_Name d_des
---------------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
001 focus setfocus(所影响的行数为 1 行)*/
比如说id这个参数在insert之前输入
剩下的参数有触发器来自动增加!