sql中用了order by,为何在dbgrid中无法修改和删除? (50分)

  • 主题发起人 主题发起人 ym_wh
  • 开始时间 开始时间
Y

ym_wh

Unregistered / Unconfirmed
GUEST, unregistred user!
一个很奇怪的问题,我在Query中的sql语句用了order by(必须用),查询结果显示在dbgrid中,
为何不能修改和删除? 同时我也设置了query1.requestlive:=true;但还不行,有人介绍用
UpdateSql控件,但我不知如何用? 请各位高手帮忙解决,如果问题得到解决,50大洋奉上.
 
1.把Query 的:CatchedUpdates= true,RequestLive=true,UpdateObject=UpdateSQL1;
2、QUERY的AfterPost时间中
加入 Query1.ApplyUpdates;
Query1.CommitUpdates;
3.双击UpdateSQL1,在Table Name处添入视图名,然后单击Get Table Fields
按纽,选中Key Fields及Update Fields列表中的全部字段,再单击Generate SQL,
即可生成SQL语句。
4、这时您可在dbgrid中进行增、删、改的操作,在执行Query1.ApplyUpdates
后,数据会写回数据库。
 
zhangkan: 很感谢您的热心回答,按照你的方法试了后,还有点问题,我把操作描述一下:
通过执行有order by 的SQL并将结果显示在DBGRID中,点击修改(执行query1.edit;)按钮,
DBGRID可以进行修改,但当把鼠标移到下一行,弹出窗口提示Update failed.删除操作当时
从DBGRID中删除了,但是实际并没有删除,再查询又出现了.我定义了Key Fields为
cyrq(承运日期),并选中了Update Fields列表中的全部字段.
再次表示感谢,先奉上10元,如果问题解决,再奉上40元.
 
我这里是好的啊,完全能够修改,可能你的这个order字段是其它表的外键吧
 
我的order字段不是外键,
sql语句是select * from khtz where ch='0944624' order by fhrq
关键字选的是承运日期,我的承运日期和返回日期都用的是字符型,错误是否在于数据库结构.
结果数据如下:
车号 收货单位 到站 品名 承运日期 返回日期 天数 备注
ch shdw dz pm cyrq fhrq ts bz
-----------------------------------------------------------------------------------------------------------------------------
0944624 西藏石油总公司成都总部 太和 汽油 2001年09月10日
0944624 四川省石油集团雅安有限公司 青龙场 汽油 2000年05月20日 2000年06月19日 31
0944624 西藏石油总公司太和油库 太和 汽油 2000年06月29日 2000年07月16日 18
0944624 金昌市石油公司 金昌 柴油 2000年07月16日 2000年07月30日 15
0944624 青海省隆达石化有限责任公司 曹家堡 溶剂油 2000年07月30日 2000年08月06日 8
0944624 夹江恒运石化有限公司 乐山 柴油 2000年08月06日 2000年08月25日 20
0944624 中油股份四川销售分公司 天回镇 柴油 2000年08月25日 2000年09月14日 21
0944624 四川省石油集团雅安有限公司 青龙场 柴油 2000年09月14日 2000年10月16日 33
0944624 四川省石油集团南充有限公司 南充东 柴油 2000年10月17日 2000年11月10日 25
0944624 张掖地区石油公司 张掖 柴油 2000年11月10日 2000年11月17日 8
0944624 河南华中石油化工有限公司 新郑 汽油 2000年11月17日 2000年12月15日 29
0944624 中油股份重庆销售永川分公司 江津 汽油 2000年12月31日 2001年01月29日 30
0944624 四川省石油集团广安有限公司 广安 汽油 2001年01月29日 2001年03月06日 37
0944624 中油股份销售甘肃分公司 金昌 汽油 2001年03月06日 2001年03月13日 8
0944624 中油股份四川销售绵阳分公司 江油 柴油 2001年03月13日 2001年03月27日 15
0944624 中油销售宝鸡公司 卧龙寺 汽油 2001年04月05日 2001年04月13日 9
0944624 中油股份四川销售绵阳分公司 江油 柴油 2001年04月13日 2001年04月23日 11
0944624 中油股份销售甘肃分公司 武威 柴油 2001年04月23日 2001年04月27日 5
0944624 玉门中油销售兰州运销分公司 铁门 溶剂油 2001年04月27日 2001年07月12日 77
0944624 郑州铁路能源商贸有限公司 郑州南 汽油 2001年07月12日 2001年07月29日 18
0944624 中原石油化工有限责任公司 汤阴 石脑油 2001年07月29日 2001年08月18日 21
0944624 中油股份四川销售德阳分公司 德阳 汽油 2001年08月18日 2001年08月28日 11
0944624 中油股份平遥公司 平遥 溶剂油 2001年08月28日 2001年09月10日 14
0944624 西藏石油总公司成都总部 太和 汽油 2001年09月27日 2001年12月05日 70
 
可能在返回日期中不允许有空值
 
我又发现个大问题,就上述结果,执行sql:
select * from khtz where ch='0944624' and fhrq between '2000年01月01日' and '2000年12月31日' order by fhrq
结果如下:
车号 收货单位 到站 品名 承运日期 返回日期 天数 备注
ch shdw dz pm cyrq fhrq ts bz
-----------------------------------------------------------------------------------------------------------------------------
0944624 四川省石油集团雅安有限公司 青龙场 汽油 2000年05月20日 2000年06月19日 31
0944624 西藏石油总公司太和油库 太和 汽油 2000年06月29日 2000年07月16日 18
0944624 金昌市石油公司 金昌 柴油 2000年07月16日 2000年07月30日 15
0944624 青海省隆达石化有限责任公司 曹家堡 溶剂油 2000年07月30日 2000年08月06日 8
0944624 夹江恒运石化有限公司 乐山 柴油 2000年08月06日 2000年08月25日 20
0944624 中油股份四川销售分公司 天回镇 柴油 2000年08月25日 2000年09月14日 21
0944624 四川省石油集团雅安有限公司 青龙场 柴油 2000年09月14日 2000年10月16日 33
0944624 四川省石油集团南充有限公司 南充东 柴油 2000年10月17日 2000年11月10日 25
0944624 张掖地区石油公司 张掖 柴油 2000年11月10日 2000年11月17日 8
0944624 河南华中石油化工有限公司 新郑 汽油 2000年11月17日 2000年12月15日 29

但执行SQL:
delete from khtz where ch='0944624' and fhrq between '2000年01月01日' and '2000年12月31日'
却无法删除数据,这个数据表没有关键字,难道真是表结构的问题?
 

Similar threads

D
回复
0
查看
889
DelphiTeacher的专栏
D
D
回复
0
查看
857
DelphiTeacher的专栏
D
D
回复
0
查看
808
DelphiTeacher的专栏
D
后退
顶部