Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

这个更新查询错在哪里

半夜罗  发表于:2015-09-19 10:52:49  
复制

请教各位老师,这个更新查询错在哪里?

Dim strSQL As String
Dim b As String
Dim a As String


a = "Left([物料代码], 2) & Format(Right([物料代码], 2) - 1, '00')"
b = Me.物料代码
strSQL = "UPDATE 袋子 SET 袋子.物料代码 ='" & a & "' WHERE 物料代码>'" & b & "'"

  DoCmd.SetWarnings False
  DoCmd.RunSQL strSQL
  DoCmd.SetWarnings True
  DoEvents

  MsgBox "已更新!", vbInformation, "消息"


谢谢!!!!!

 

Top
杜超 发表于:2015-09-19 12:48:34

文本型的不能比大小,WHERE 物料代码>'" & b & "'"



cspa 发表于:2015-09-19 13:50:52

a = "Left([物料代码], 2) & Format(Right([物料代码], 2) - 1, '00')"

改为:

a = Left([物料代码], 2) & Format(Right([物料代码], 2) - 1, "00")



半夜罗 发表于:2015-09-19 16:08:04

谢谢1楼、2楼老师!

没有理想的效果
用下面代码只能更新一条记录,不是想要的。
Dim strSQL As String
Dim b As String
Dim a As String


a = Left([员工编码], 1) & Format(Right([员工编码], 2) - 1, "00")
b = Me.员工编码
strSQL = "UPDATE 员工 SET 员工.员工编码 ='" & a & "' WHERE 员工编码 > '" & b & "'"

  DoCmd.SetWarnings False
  DoCmd.RunSQL strSQL
  DoCmd.SetWarnings True
  DoEvents
  MsgBox "已更新!", vbInformation, "消息"

想要的效果是:这个更新查询确实完全能达到要求,凡是大于“Me.员工编码”的全部更新,下面代码就能达到效果,但多出一个查询 "更新员工编码"。用上面的代码就能少这个查询,但没有成功。
DoCmd.OpenQuery "更新员工编码"'这个效果就不错,但就是不想多 "更新员工编码" 这个查询
“更新员工编码”是这样设计的:
字段:员工编码
表:员工
更新到:Left([员工编码],1) & Format(Right([员工编码],2)-"1","00")
条件:>[forms]![员工修改]![员工编码]

而用下面的代码:
DoCmd.RunSQL "UPDATE 袋子 SET 袋子.物料代码 = Left([物料代码],2) & Format(Right([物料代码],2)-'1','00') & WHERE (((袋子.物料代码)>[forms]![袋子]![物料代码]))"
又出现操作符丢失的提示。



cspa 发表于:2015-09-19 16:25:14

改为

DoCmd.RunSQL "UPDATE 袋子 SET 袋子.物料代码 ='" & Left([物料代码],2) & Format(Right([物料代码],2)-'1','00') & "' WHERE (((袋子.物料代码)>[forms]![袋子]![物料代码]))"

试试

但是不建议这样做。编号一旦建立最好不要频繁更新,否则会造成过往记录数据关系混乱。如确需更新也可釆用循环语句+记录集的方法逐条更新条件记录集中的记录。




半夜罗 发表于:2015-09-19 16:36:21

谢谢4楼老师,现改成

DoCmd.RunSQL "UPDATE 袋子 SET 袋子.物料代码 = Left([物料代码],2) & Format(Right([物料代码],2)-'1','00') WHERE (袋子.物料代码)>forms![袋子]![物料代码]"

效果不错,原来是双引号与单引号的问题。被我的习惯骗了,原来一直是直接复制设计视图中的 sql 代码,其中的双引号被直接引用了,改成单引号后,问题解决了。



半夜罗 发表于:2015-09-19 16:47:53
      谢谢4楼老师的建议,不过在建立级联更新与级联删除关系后也会出现混乱吗?我是初学的,所以不太清楚这个问题。当然,我提出这个问题,主要还是在于对更新查询的探讨与扩展,再说在实际中就出现过这个问题,一次在查询数据时,发现中间出现了断号,结果引起了不必要的争议,有人反复问这张断号跑到哪里去了。

总记录:6篇  页次:1/1 9 1 :