从表的datasource属性设为与主表关连的Tdatasource控件

解决方案 »

  1.   

    解决的办法是不要设置从表的Datasource属性为主表的TDatasource控件。自己处理主从的关系。这是我从网友的来的经验之谈。否则带来很多连带影响。可惜了,我的80分。不过现在有一个新的问题。
    我前台用Delphi的Query,后台是Oracle数据库但在处理Date类型字段时,会出现。错误
      

  2.   

    利用AFTERSCROLL事件,将两个表联系在一起.代码用SQL语句可以实现的.
      

  3.   

    最好在数据库中设置一个Triger.
    控制主从表的关系。但不要控制的太死。
    参考:DelphiClassInfo(主表)(Delphi类帮助信息)和DelphiItemInfo
    (从表)(Delphi每一个类的属性/方法/事件)//****************************************************
    //          DelphiClassInfo的Triger
    //****************************************************
    create trigger tD_DelphiClassInfo on DelphiClassInfo for DELETE as
    /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
    /* DELETE trigger on DelphiClassInfo */
    begin
      declare  @errno   int,
               @errmsg  varchar(255)
        /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
        /* DelphiClassInfo R/2 DelphiItemInfo ON PARENT DELETE RESTRICT */
        if exists (
          select * from deleted,DelphiItemInfo
          where
            /*  %JoinFKPK(DelphiItemInfo,deleted," = "," and") */
            DelphiItemInfo.ClassName = deleted.ClassName
        )
        begin
          select @errno  = 30001,
                 @errmsg = 'Cannot DELETE DelphiClassInfo because DelphiItemInfo exists.'
          goto error
        end
        /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
        return
    error:
        raiserror @errno @errmsg
        rollback transaction
    end//*****************************************************
    create trigger tU_DelphiClassInfo on DelphiClassInfo for UPDATE as
    /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
    /* UPDATE trigger on DelphiClassInfo */
    begin
      declare  @numrows int,
               @nullcnt int,
               @validcnt int,
               @insClassName varchar(80),
               @errno   int,
               @errmsg  varchar(255)  select @numrows = @@rowcount
      /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
      /* DelphiClassInfo R/2 DelphiItemInfo ON PARENT UPDATE RESTRICT */
      if
        /* %ParentPK(" or",update) */
        update(ClassName)
      begin
        if exists (
          select * from deleted,DelphiItemInfo
          where
            /*  %JoinFKPK(DelphiItemInfo,deleted," = "," and") */
            DelphiItemInfo.ClassName = deleted.ClassName
        )
        begin
          select @errno  = 30005,
                 @errmsg = 'Cannot UPDATE DelphiClassInfo because DelphiItemInfo exists.'
          goto error
        end
      end
      /* ERwin Builtin Sat Nov 24 16:18:45 2001 */
      return
    error:
        raiserror @errno @errmsg
        rollback transaction
    end//****************************************************
    //          DelphiItemInfo的Triger
    //****************************************************
    create trigger tI_DelphiItemInfo on DelphiItemInfo for INSERT as
    /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
    /* INSERT trigger on DelphiItemInfo */
    begin
      declare  @numrows int,
               @nullcnt int,
               @validcnt int,
               @errno   int,
               @errmsg  varchar(255)  select @numrows = @@rowcount
      /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
      /* DelphiClassInfo R/2 DelphiItemInfo ON CHILD INSERT RESTRICT */
      if
        /* %ChildFK(" or",update) */
        update(ClassName)
      begin
        select @nullcnt = 0
        select @validcnt = count(*)
          from inserted,DelphiClassInfo
            where
              /* %JoinFKPK(inserted,DelphiClassInfo) */
              inserted.ClassName = DelphiClassInfo.ClassName
        /* %NotnullFK(inserted," is null","select @nullcnt = count(*) from inserted where"," and") */
        
        if @validcnt + @nullcnt != @numrows
        begin
          select @errno  = 30002,
                 @errmsg = 'Cannot INSERT DelphiItemInfo because DelphiClassInfo does not exist.'
          goto error
        end
      end
      /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
      return
    error:
        raiserror @errno @errmsg
        rollback transaction
    endcreate trigger tU_DelphiItemInfo on DelphiItemInfo for UPDATE as
    /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
    /* UPDATE trigger on DelphiItemInfo */
    begin
      declare  @numrows int,
               @nullcnt int,
               @validcnt int,
               @insClassName varchar(80), 
               @insItemKind int, 
               @insProperty varchar(100),
               @errno   int,
               @errmsg  varchar(255)  select @numrows = @@rowcount
      /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
      /* DelphiClassInfo R/2 DelphiItemInfo ON CHILD UPDATE RESTRICT */
      if
        /* %ChildFK(" or",update) */
        update(ClassName)
      begin
        select @nullcnt = 0
        select @validcnt = count(*)
          from inserted,DelphiClassInfo
            where
              /* %JoinFKPK(inserted,DelphiClassInfo) */
              inserted.ClassName = DelphiClassInfo.ClassName
        /* %NotnullFK(inserted," is null","select @nullcnt = count(*) from inserted where"," and") */
        
        if @validcnt + @nullcnt != @numrows
        begin
          select @errno  = 30007,
                 @errmsg = 'Cannot UPDATE DelphiItemInfo because DelphiClassInfo does not exist.'
          goto error
        end
      end
      /* ERwin Builtin Sat Nov 24 16:21:11 2001 */
      return
    error:
        raiserror @errno @errmsg
        rollback transaction
    end
      

  4.   

    补充:
    我用的是Oracle数据库。数据表字段时Date类型。
    在用Query处理日期时,我调用
      SldMxbCkCzyRq.Clear;
    (收料单明细表仓库操作员日期)
    设置为空。但在下次查询时,
    Oracle报
    ORA-01801: 日期格式对于内部缓冲区过长 错误
    Delphi报 Invalid Time 错误。而我原先用Table实现是没有此错误。
    请问Query有何方法实现置Null处理?急!