打开一个产品的记录
  货号
GOODS001 XXXXX XXXXX...
 
grid里同时取得2条子表记录,分别是这个产品的2个供应商信息   供应商编号 
1  SP001[...]    XXXXX XXXXX...
2  SP002[...]    XXXXX XXXXX...子表定义供应商编号为主键 , [...] 代表是个按钮列,通过这个按钮来选供应商一、重新选择第一条记录的供应商编号为SP002   供应商编号 
1  SP002[...]    XXXXX XXXXX...
2  SP002[...]    XXXXX XXXXX...二、重新选择第二条记录的供应商编号为SP001   供应商编号 
1  SP002[...]    XXXXX XXXXX...
2  SP001[...]    XXXXX XXXXX...UpdateBatch 主键重复,不能保存
我想是UpdateBatch在执行第一步的时候主键重复了但实际上最后主键是不会重复的,如果让其忽略中途暂时的主键重复,让2次update变成2次delete2次insert?

解决方案 »

  1.   

    只能说明你在处理主键的时候处理得不好,主键是不能重复的,一次也不可以,暂时的也不可以。这两个表其实主键的关系很简单,供应商表主键就是供应商代号,产品表的主键要有两个1。产品代号,2,供应商代号(这个是外关键字) 对于产品表只要产品代号和供应商代号两个关键字不完全一样就可以。即比如
    产品表可以这样存在
    产品代号,品名,供应商代号,单价,
    p001      xxx      SP001       10
    p001      xxx      SP002       11你还可以添加对同一产品的第三条,或者更多的记录,只要供应商不同就可以。insert into table(我省略了)values('p001','xxx','sp003',9)等等,添加其他的产品代号也一样道理,但是在添加产品表之前,必须要先让供应商表完整。比如以上添加的这条如果sp003在供应商表还没有添加,那就不行。
      

  2.   

    那不就没有用到delphi的绑定机制了么?我知道可以完全用事务+sql语句来完成,但绑定机制不会连这么简单的情况都处理不好吧
      

  3.   

    忘了说主表主键b_id
    从表主键是father,供应商编号 
    father=b_id