缓存更新下的主子表交换记录

ilikeff8 2005-07-17 03:47:57
打开一个产品的记录
货号
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?

...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovend 2005-07-17
  • 打赏
  • 举报
回复
只能说明你在处理主键的时候处理得不好,主键是不能重复的,一次也不可以,暂时的也不可以。

这两个表其实主键的关系很简单,供应商表主键就是供应商代号,产品表的主键要有两个1。产品代号,2,供应商代号(这个是外关键字)

对于产品表只要产品代号和供应商代号两个关键字不完全一样就可以。即

比如
产品表可以这样存在
产品代号,品名,供应商代号,单价,。。。
p001 xxx SP001 10
p001 xxx SP002 11

你还可以添加对同一产品的第三条,或者更多的记录,只要供应商不同就可以。

insert into table(我省略了)values('p001','xxx','sp003',9)等等,添加其他的产品代号也一样道理,但是在添加产品表之前,必须要先让供应商表完整。比如以上添加的这条如果sp003在供应商表还没有添加,那就不行。



ilikeff8 2005-07-17
  • 打赏
  • 举报
回复
忘了说主表主键b_id
从表主键是father,供应商编号
father=b_id
ilikeff8 2005-07-17
  • 打赏
  • 举报
回复
那不就没有用到delphi的绑定机制了么?我知道可以完全用事务+sql语句来完成,但绑定机制不会连这么简单的情况都处理不好吧

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧