读书人

delphi query与sql主键约束的有关问题

发布时间: 2012-05-31 12:19:24 作者: rapoo

delphi query与sql主键约束的问题
bom表结构
create table bom1
(
ParentCode char(10)
ItemCode char(10)
UseQty numeric(15,8)
)
该表设计为单层bom,存在主键约束 ParentCode+ItemCode:
在同一个成品下料件不能重复出现
现存在这样的问题:在成品A下有料件b
在[编辑状态]下又新增一条记录在bom中变成
A下面包含
b
b
第一个b是原有的,第二个b是新增的
此时将第一个b删除,执行保存将报主键约束错误。
因为sql认为数据表中已存在A+b的主键关系,而第二个b在query中被认为是新增的,更新到数据库时使用的是insert语句

所用控件为TQuery+TUpdateSql
请教下各位

[解决办法]
如果数据库设计ParentCode+ItemCode为主键,那么新增时能提交成功吗?应该不会出现
A下面包含
b
b
这种情况。

如果真的出现,建议在TQuery的beforeInsert中先认为判断当前要插入的数据是否已经存在。
[解决办法]
这只能说明你的程序有问题。
在编辑状态下新增记录,根本就不应该插入b
先取同一个ParentCode下,ItemCode的最大值,加1,作为新的b
[解决办法]
插入前不可以先判断一下是否重复吗?
[解决办法]
你的意思是已经存在 A + b的话就将其先删除再添加新的 A + b ???

那就按逻辑一步一步来,先删除提交,再添加。
[解决办法]
楼主是不是 删除了query中的 第一条B;但实际数据库中没有删除 所以会报错。

读书人网 >.NET

热点推荐