求一问题解决方案

Delphi_jpy 2009-11-25 02:45:35
多表关联,更新主表提示键列信息不足
大致情况:
一 主表
id 客户代码 删除标志 选中标志
E4AB44D4572DB4469043A520F5583491 1 0 0
F43CFD285DD5644C93EF90CEDF016C3D 1 0 0
从表
id 主表id bugid
1 E4AB44D4572DB4469043A520F5583491 1(代表1号缺陷)
2 E4AB44D4572DB4469043A520F5583491 2(代表2号缺陷)
3 E4AB44D4572DB4469043A520F5583491 3(代表3号缺陷)
二:现对从表进行行列互换,代码为:
对应sql:select 主表id,max(case bug_id when '1' then '有' end) as bug1,max(case bug_id when '2' then '有' end) as bug2,max(case bug_id when '3' then '有' end) as bug3 from Opt_Bug_Infos group by 主表id
形成以下查询结果:
id 主表id bugid1(是否有一号缺陷) bugid2 bugid3
1 E4AB44D4572DB4469043A520F5583491 有 有 有
2 F43CFD285DD5644C93EF90CEDF016C3D 无 无 无

三 通过主表与从表关联
select * from 主表 a left join (max(case bug_id when '1' then '有' end) as bug1,max(case bug_id when '2' then '有' end) as bug2,max(case bug_id when '3' then '有' end) as bug3 from Opt_Bug_Infos group by 主表id ) k on a.id=k.主表id

能正常查询出结果,但当查询后对主表进行更新操作后,出现键列信息不足
所有的数据是在dbgrid里显示的,主表的checked属性代表该条记录是否被选中后更新,采用的是adoupdatebatch提交方式,当选中记录执行更新操作就出现该错误提示

主表跟从表都有主键的


...全文
59 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delphi_jpy 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 icelovey 的回复:]
引用 5 楼 delphi_jpy 的回复:
对使用delphi写的,数据库字段都有默认值,采用的是批量提交方式,问题的症结在哪里呢?

应该是你的数据在前台修改的时候, 服务器的记录已经被别人改掉了~
[/Quote]
只有我一台机器调试用
Delphi_jpy 2009-11-25
  • 打赏
  • 举报
回复
去掉关联的从表更新一点问题都没有
icelovey 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 delphi_jpy 的回复:]
对使用delphi写的,数据库字段都有默认值,采用的是批量提交方式,问题的症结在哪里呢?
[/Quote]
应该是你的数据在前台修改的时候, 服务器的记录已经被别人改掉了~
Delphi_jpy 2009-11-25
  • 打赏
  • 举报
回复
对使用delphi写的,数据库字段都有默认值,采用的是批量提交方式,问题的症结在哪里呢?
icelovey 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 delphi_jpy 的回复:]
多表关联,更新主表提示键列信息不足
大致情况:
一 主表
id                                      客户代码  删除标志    选中标志
E4AB44D4572DB4469043A520F5583491        1          0            0
F43CFD285DD5644C93EF90CEDF016C3D        1          0            0
从表
id  主表id                                    bugid
1    E4AB44D4572DB4469043A520F5583491          1(代表1号缺陷)
2    E4AB44D4572DB4469043A520F5583491          2(代表2号缺陷)
3    E4AB44D4572DB4469043A520F5583491          3(代表3号缺陷)
二:现对从表进行行列互换,代码为:
对应sql:select 主表id,max(case bug_id when '1' then '有'  end) as bug1,max(case bug_id when '2' then '有'  end) as bug2,max(case bug_id when '3' then '有'  end) as bug3 from Opt_Bug_Infos group by 主表id 
形成以下查询结果:
id 主表id                                bugid1(是否有一号缺陷) bugid2 bugid3
1  E4AB44D4572DB4469043A520F5583491        有                      有      有
2  F43CFD285DD5644C93EF90CEDF016C3D        无                      无      无

三 通过主表与从表关联
select * from 主表 a left join (max(case bug_id when '1' then '有'  end) as bug1,max(case bug_id when '2' then '有'  end) as bug2,max(case bug_id when '3' then '有'  end) as bug3  from Opt_Bug_Infos group by 主表id ) k on a.id=k.主表id

能正常查询出结果,但当查询后对主表进行更新操作后,出现键列信息不足
所有的数据是在dbgrid里显示的,主表的checked属性代表该条记录是否被选中后更新,采用的是adoupdatebatch提交方式,当选中记录执行更新操作就出现该错误提示

主表跟从表都有主键的



[/Quote]你的程序应该是DELPHI写的吧, 这种情况应该对数据修改了, 但是没有提交上服务器, 然后你又想再去改..不是你的SQL语句或者表达问题!
Delphi_jpy 2009-11-25
  • 打赏
  • 举报
回复
主表和从表都有主键的
--小F-- 2009-11-25
  • 打赏
  • 举报
回复
这个错误往往是因为表没有主键,而且有重复数据,那样更新或者删除这些重复数据的时候出这个错
icelovey 2009-11-25
  • 打赏
  • 举报
回复
题目好长...

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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