这张 TDBGrid 数据,是 dbo.Table_1 的查询结果。dbo.Table_1,字段:Table_1_No,Table_1_Price,等等还有其他属性。dbo.Table_2,字段:Table_2_No,Table_1_No,Table_2_Price,Table_2_Date。当 Table_1_Price 的值改变并且确定保存的时候,【更新】到 dbo.Table_1 的同时,附上日期数据同时【新增】到 dbo.Table_2 。当 Table_1_Price 的值没有改变(尽管其他字段值改变)的时候,也就没有必要【新增】到 dbo.Table_2 了。
主要问题,
1、怎么判断这张表 TDBGrid 字段 Table_1_Price 的值已经改变了?
2、如果改变了,怎么同时新增到另外一张表 dbo.Table_2 里面去?不知道描述清楚了没有。谢谢

解决方案 »

  1.   

    关键看业务逻辑上面是不是需要保存历史价格,如果需要的话那你在物理表Table2里面就需要保存当时的Price且不能再随Table1变化(一般都是这样的)。
      

  2.   

    我认为通过sql server2000 中的更新触发器来做,当改变了Table_1的Price就更新 到Table_的price 
      

  3.   

    在afterpost事件中处理,或者增加price的固定字段,在字段的SetText事件中处理如果sql server的话,还可以考虑触发器去实现
      

  4.   


    确实是需要保存历史价格的。不过你这里后面一句话我不太明白,我应该如何理解呢?============================================================================================================================================
    谢谢二位,因为我刚初学不久,就知道建立一个数据库,创建某几个表,设立主键,然后 delphi 那边就使用ado链接数据库,使用 DBNavigator 读或者写,以至于 MSSQL 的触发器,一点也不熟悉,更不知道 触发器 可以有这么多功能。我现在就尝试着使用触发器来做,不懂就回来求教~
      

  5.   

    比如说有下面三个表:
    Products  商品表
    Orders    订单表
    OrderLines订单明细像OrderLines里面保存的就是当时交易的价格,它里面会有一个Price字段,这个是不能更新的。其他的情况可以按照上面几位说的来处理。
      

  6.   


    是的啊。所以,dbo.Table_2 的 Price 就用日期来标记不同时段不同的 Price 值咯。
      

  7.   

    现在的问题,看了几个范例,不太看得懂。首先不懂的是,这个触发器,是在 dbo.Table_1 创建呢,还是在 dbo.Table_2 创建?谁可以在这个列子上给一点代码呢?⊙﹏⊙b汗
      

  8.   

    补充一下,环境:windows 2003 server + delphi 7 + MSSQL2005 。