数据库用Access2000,用Ado连接.
主表(inStore) 入库单
Inid,indate,storeid,Subtotal
从表(inStoreMx) 入库明细
inid,Goodsid,unit,uprice,Quantyty库存表(Storage)
storeid,goodsid,quantity本人刚学,编程不知怎么做.最好有源代码,分不够可++.

解决方案 »

  1.   

    看李维的《Delphi5.x ADO/MTS/COM+高级程序设计篇》,你可以得到最佳答案。
      

  2.   

    给你几点思路:
    1、首先建立关于主表的查询。
    2、将主表的查询与dbgrid连接起来。(只列出了一种方式。你可与多种数据感知控件联系)
    3、新增从表的查询,但要带上参数如inid=:主表的当前inid.
    4、在datasource的ondatachange事件中,带参数打开从表查询。如
    childquery.close;
    childquery.parambyname('inid').value:=...;
    childquery.prepare:=true;
    childquery.open();
    此时查出的记录就是与主表相关的记录。
    5、删除从表的记录好办,你直接删除就可以了,删除主表的记录时,要注意将数据库的(以mssql2000为例)外键的级联删除设定为真,或你自己用delete * from childtable where inid=@inid也可以。删除完后refresh.
    6、追加时将childquery的inid设为主表当前inid的值,并禁止用户修改。其余项用户自行录入。
      

  3.   

    主表(inStore) 入库单與从表(inStoreMx) 入库明细﹕
    之間用Inid關聯不就好了﹐我看不出來有什么難的。
      

  4.   

    注意不要用从表的Datasource进行主从表同步
      

  5.   

    使用shape,SHAPE  {select a.*,b.Goodsid,b.unit,b.uprice,b.Quantyty
     from 入库单 a,入库明细 b} 
    APPEND ({select * from 库存表} AS cgqdxm
       RELATE goodsid TO goodsid) 
    记着改你的连接为datashape
    delphi带有具体的例子,我就不多写了
      

  6.   


     to  fontain:  shape是什么啊?Delphi6中是哪个例子.
      

  7.   

    To easysm(奔三) 以为你早搞定了。
    以下是可行的方案,注意关键点:
    1.注意不要用从表的Datasource进行主从表同步,而在主表也就是入库单的MasterQuery的AfterScroll中,进行从表刷新,具体的原因你做这个例子的时候就会明白。
    procedure TFrm_Mtin.MasterQueryAfterScroll(DataSet: TDataSet);
    begin
      inherited;
      //保持主从表同步
      DetailQuery.Parameters.ParamByName('mti_no').Value :=
        MasterQuery.fieldbyname('mti_no').Value;   //假设mti_no为入库单编号
      if DetailQuery.Active then
      begin
        DetailQuery.Close;
        DetailQuery.Open;
      end;
    end;
    2.从表的更新方式改为批量更新。
    3.主表的NewRecord事件中,给入库单编号赋值(如果不是自动增长的话)
    4.从表的NewRecord事件中把入库单的编号等于主表的入库单编号(要求从表的入库单编号不能是自动增长类型)
    5.在保存按钮中MasterQuery.post,然后在主表的Post事件中对从表的数据有效性进行判断,如果在第3步中,主表的ID不是自动形成的话,你还要取最大值加一形成入库单编号,并遍历从表进行入库单编号的修改,如果符合要求在进行DetailQuery.updatebatch(),此时最后用事物进行处理。
    里面还有一些细节问题,你应该可以搞定,有问题的话就留言吧。
      

  8.   

    打了这么多的字感慨很多,即使上面有位朋友提到的李维的那本书也找不到对主从表的处理方法,上面只是提到怎样对主从表的查询,就是从表的DataSource设为主表的Datasource,然后在从表的查询中用:acolumn。但实际的工作远不至这些,真希望有那为朋友能够对这些常见的问题进行总结。
      

  9.   

    Sorry,刚才给你发过消息后,再看看这各贴子,才发现你用的是Access。
    那就在这个事务中进行库存增加操作吧。另:我以前也比较爱存储当前库存,这样的话就可以得到某一时间的库存是多少,因为什么而发生变化的。在实际的引用中发现,还是通过使用的时候查询汇总要方便些,这些都是个人的习惯供参考。
      

  10.   

    1.其实在修改的时候已是一样的,也会触发beforepost事件的,这样才能保存到数据库。你应该在这里做一个查询,查询该材料的上次入库的数量是否发生变化(你最后在库存表中加一个子段记录,本次入库单的ID).
    2.这里面其实有漏洞的,在BeforePost中启动的时候只是一个事务,在该事件中如果你没有abort,则系统会提交到数据库,但如果你违反乐数据库的规则,照样提交失败,而你在Beforepost事件中的事务却保存入了数据库。所以我让你在Beforepost一定要进行字段的有效性判断,如不能为空的字段是否为空。
    3.我的全部是查询出来的(对库存变化的细节要求不严格的需求)。速度慢你可以队每月的数据进行汇总存到一个字段,以后就不用在进行整个月的汇总直接用这个数值就可以了。不过我觉得数据库查询速度不是问题,关键在于数据库的优化,如果索引等对速度的影响更直接。----------------------------------------------------------------
    原贴内容:
    hhytsoft(雨中独行) 你好!
       若主从表是新增还比较好在事物中更新库存,若是修改我就不知如何下手了.这样判断
    明细记录的入库数量是否变化,还是删除,还是材料发生了改变. *******
    如果在从表的更新中出现错误,就会导致数据的处理错误,库存增加了,而入库材料没有增加。
    *****
    上面是你说的,我就来明白了,不是在同一个事物中吗,如果出错不会取消整个事物的更
    新吗,怎么又不会呢?还有不做库存表,若果软件上红线一两年数据查询汇总要很长时间的.你是不是有做一个库存期初表,再利用什么月节帐反上月的进出数据汇总来得到月初库
    存? 还是其它方法?