第一个问题照wfmwg(马子) 。
第二个问题可以用计算字段解决。具体:在物理字段中,设置入库数量和取线数量字段,当前数量用计算字段,这样在数据未存入后台服务器时也能正确显示。

解决方案 »

  1.   

    你处理的方法从根本上说是错误的。这里包含了两个流程:
    1> 库存管理
    2> 出货管理
    库存中没有的货物,是无法出货的,因此,你的第一个问题的解决方法是在进货时,就要登记货物,而不是在出货时登记。
    同时,第二个问题 是站不住脚的。因为在取货的时候,不可能同一种货需要同时取出不同数量的两次。查看你上表,就可以明白,你的取货是在不同日期完成的,因此,不存在数据还没ApplyUpdates的情况(你不可以保存数据到第二天、第三天还没提交吧)如果你一定要按你设想的做的话,那么,我可以说,你的设计根本没有实用价值,只是小孩玩过家家罢了。
      

  2.   

    To 沐枫:设计有没有实用价值,是看是否能满足客户的需要,客户的要求很明确,就是这样,编码人员的工作只是负责把他的设计要求解释给计算机而已;第二,我的例表只是一个范例,“同一种货需要同时取出不同数量的两次”的可能是有的,同一天会出同一种货物多次的可能性也是有的。我建议在CSDN论坛大家能够只回答编程技术上的问题,讨论过多设计意图这种话有什么意思?设计意图是客户订的,我们只需要考虑他的需要,就算不合理,有没有实用价值是他的事,其实很简单:他的要求-》我的编码-》他满意付钱。你为什么只在骂人,而不回答有关我的问题上一些纯技术的东西呢?难道这就代表你的水平高吗?那你应该当策划人员,而不该当编码人员。
      

  3.   

    我很抱歉,可能是我考虑欠周。被你训一下,我很汗颜。对于这个问题,我有个初步的想法,希望能帮得上忙。你所提出的两个问题,可以总结成一个:如何从缓冲区中取数据。DataSet中的每个字段都有几个代 表值:OldValue, NewValue,Value, CurValue等用来保存当前数据和原有的数据等,还有一个属性表明记录的状戊(如插入,删除,更改等)。因此,你Post而没有提交到数据库中去的数据就存在本地的DataSet中,直接用该字段的Value可取出最新的值,就象你在DBGrid中可以看到最新的值一样。
    也就是说,Post的缓冲区就是可以直接通过DataSet访问的。
      

  4.   

    因为暂时客户方面对并发操作没有特别要求,所以先把主要功能做出来再说,pure_cmh(不死鸟)有什么好的建议吗?
      

  5.   

    我也是菜鸟还没做过两层的系统,不过我想,或许可以借鉴一下我在单层系统中的做法。
    做一个临时表, post 到临时表中, 需要ApplyUpdates时从临时表中取数据,然后清
    空临时表。这样似乎可以解决你的问题,对否请高手指正。
      

  6.   

    能说说你整个程序的结构吗?
    我常用的结构是:
      数据库服务器:(NT)+SQL7
      中间件:MTS/COM+
      服务程序采用:  MIDAS
      网络联接采用:    ScktSrvr.exe (LAN)
      客户端:SocketConnection MIDAS 
      
      

  7.   

    我做的是两层结构,前台通过BDE连上后台SQLServer7.0数据库,具体操作我已经在问题中讲得很清楚了,怎样实现都可以,只要能实现就行,至于用临时表、计算字段等办法,因为我是菜鸟,还是不知道怎样实现,为什么没有人给出具体的代码,只说提示和设想我也不知道该怎么做呀!
      

  8.   

    我来回答怎么从缓冲区获取数据。可以试一下在两层结构中使用MIDAS技术:
    该方法需要使用TDataSetProvider控件和TClientDataSet控件(都在Midas页)。
    将原来的Database控件保持不动,将Query控件(如果你用的是Query)的CachedUpdates改成false,rquestLive改成true,updateObject改成空,用一个DataSetProvider1和Query控件连接(DataSetProvider1.DataSet:=Query),再用一个clientDataSEt1控件和DataSetProvider连接(ClientDataSet1.Provider:=DataSetProvider1),然后将你原来和Query相连的DataSource和ClientDataSEt1相连。
      ClientDataSet中有一个Delta属性,用户对数据集进行的所有修改都记录在Delta当中,你可以用另外的一个ClientDataSet2来解析Delta,来知道用户的修改,具体的方法就是:ClientDataSet2.Data:=ClientDataSet1.Delta,此时就可以用通常访问数据集的方法来访问ClientDataSet2,来获取已修改的记录。
      你可以用一个DBgrid和ClientDataSet2连接,修改记录(增加、删除等)然后用一个按钮执行ClientDataSet2.Data:=ClientDataSet1.Delta,看DBGrid有何变化。
      更具体的,你可以在需要检查缓冲区的时候,用ClientDataSet2.Locate(..)或者诸如此类的方法来判断某条记录是否在ClientDataSet1的缓冲区中。
      在更新数据的时候,用ClientDataSet1.ApplyUpdate(0),来更新。
      我说得可能不太清楚,如果有不明白的地方请继续提问。
      

  9.   

    还是不太懂,如果要我照葫芦画瓢大概能知道基本的操作,但对于原理不懂不是没有意义,对于MIDAS技术,说真的我从来没有接触过,所以才认为为典型的菜鸟嘛!谢谢hzb的回答,真的非常感谢,想提一个小小的请求:能把一个简单的范例贴出来吗?或者发到[email protected]信箱也可以,谢谢你!
      

  10.   

    还是没有,是[email protected],要不然[email protected]也可以。
      

  11.   

    我给两个信箱都发了,如果还收不到,另外给我一个不是sina的邮箱(昨晚我用sina发了一晚都没发出去,后来用263发的。)
      

  12.   

    谢谢hzb,很不错的例子。给分。