大家好!
    我在做一个两层C/S结构(Delhpi7.0+Sql 2000  ADO连接)的数据库应用程序.其中我用到主从表结构来输入BOM主表与BOM子表(物料信息).我是用TADOQUERY控件实现.
    adoqyMaster.sql    Select billid,billDate,CustomerID(外键--表
                       Customer),Customer.CustomerName,ProductionCode(外键--表
                       Production),ProductionName,Qty...
    adoqyDetail.Sql    Select billID(外键--主表),ItemNo,MaterialCode(外键--
                       表Material),Material.Name,Qty...
    adoqyDetail.DataSource 我已设为主表的 dsMaster 数据源.
    如上我按正常设置好后,其它都正常.
    问题出在我在新增主表后,保存时POST,不能成功(可后来发现值却又保存到了SQL DB里),错误提示: 不能将CustomerID空值保存到Customer表,其它我在新增BOM已输了且是已存在的CustomerID;即问题的关键点是,如上主表的SQL语句,在保存,却先要将Customer.CustomerName值保存到Customer表,我是通过SQL跟踪看到这条语句的.
   同样新增明细表也是不成功,(可后来发现明细的值却又保存到了SQL DB里) 提示不能将NULL值保存到Material  表.          
   因为如上SQL与外键表的关联,删除的时候也出错,提示不能删除 Customer表......   如上,请问老鸟们我错在哪里?还是DELPHI的功能不支持这样做?以上BOM案例我该怎样去达成?
   谢谢!
   
 

解决方案 »

  1.   

    新增的时候再用另一个ADOQUERY写INSERT语句,成功后再刷新列表中的数据
      

  2.   


       真的只能如smiler007(笑一笑)这样吗? 
       还有谁用更好的办法呀?????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   我加了这条语句  qyMaster.Properties['Unique Table'].Value:='Bom_Mster';   发现还是时好时坏,不稳定.
       急盼答案!!!!!!!!!!!!!!!!!!!!!  
      

  3.   

    有勇气,能想到是Delphi的bug。
      

  4.   

    这样解决:
       1. qyMasterAfterOpen(..........................
              qyMaster.Properties['Unique Table'].Value:='Bom_Mster';   2.输入界面非 Bom_Master 表的字段请勿用 TDBEDIT控件,而用 TDBTEXT控件.   3.TDBTEXT 控件不直接通过DataSource 关联,而必须在  qyMasterScroll事件中赋值.