现在需要一个程序段!小弟一时不知如何下手来写!
程序要求如下:
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]中!
在此先感谢您对我的帮助!

解决方案 »

  1.   

    表的关联,就是说在sqlserver里面建立一个触发器,当detail表发生变化时候,maini表自动变化,所以你只需要用delphi对detail表操作,然后用触发器管理main表!
      

  2.   

    邮箱地址更正:[email protected]或者[email protected]中!
      

  3.   

    有的话给我也一份哈:[email protected]
      

  4.   

    如果不用触发器,就只能在程序里加了,不过要比触发器麻烦的多了,
    也就是每次在对T_Detail表的 增 删 改  操作时,就要对T_Main表操作。用你的例子:
    T_Detail中增加'001','setfocus','中国','中华人民共和国','中国人民'
    那么加'001','setfocus','中国'到T_Main中去。前面要求把'001','setfocus','中国'各给一个变量
    if 增加成功后 then
    begin
       增加到T_Main中去
    end;
      

  5.   

    用触发器或存储过程都可以。
    给你一个建议,这个问题如果你到MS-SQL的版块问的话,回答会更快。而且有具体的东西。
      

  6.   

    当然是用触发器。eg:新增触发器
    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
      

  7.   

    --表的创建
    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
      

  8.   

    程序中,使用ADO连接.
    在记录更新前.开启事务
    并用错误处理捕获错误.如果出错,回滚事务.
    如果所有处理正确完成,提交事务.因为这样工作,触发器中的事务为内层事务
    基于事务的嵌套处理规则.可以满足楼主的要求
      

  9.   

    简单测试一下:
    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 行)*/
      

  10.   

    触发器不行!因为还有一个字段不是通过T_detail中传递过去给t_main的!能不能有别的?
      

  11.   

    存储过程的参数怎么样可以不同时输入
    比如说id这个参数在insert之前输入
    剩下的参数有触发器来自动增加!
      

  12.   

    是调用保存按钮后,提交数据吗?如果是,可以用UPSQL控件呀。