Access交流中心

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

where 子句能否用变量来替代?

宋冠平  发表于:2014-08-16 13:55:20  
复制

在docmd.runsql 的语句中的where子句能否用自己定义的变量来替代,变量的值通过用户操作选择得来!

通常我们在where语句后面加上  字段1=‘ “ & 变量1 & ” ’,字段2=‘ “ & 变量2 & ” ’。。。。。来引用变量1,但是因为where后面的字段有十几个,选择的字段有多有少,能否将这些条件全部用一个变量strwhere来替代。并且这个变量也是可以用在其他SQL语句中的。

我自己试了一下,没有成功,不知道是哪里写错了,还是不能这样写。

我是自学的,有很多问题不懂,请大家指教!

下面是部分代码:


strwhere = Me.完工输入明细.Form.Filter
strwhere = Replace(strwhere, """", "'")(这里的单双引号替换是竹笛老师帮我解决的)


Dim fxsql As String
fxsql = "UPDATE 完工输入明细 SET 完工输入明细.选定 = [完工输入明细]![选定]+1 where strwhere)"
DoCmd.RunSQL fxsql
Me.Requery


 

Top
cspa 发表于:2014-08-16 18:01:01

如果“完工输入明细.选定”为字符型字段,改为:

fxsql = "UPDATE 完工输入明细 SET 完工输入明细.选定 = '" & forms![完工输入明细]![选定]+1 & "' where "  & strwhere & ";"

 

如果“完工输入明细.选定”为数字型字段,改为:

fxsql = "UPDATE 完工输入明细 SET 完工输入明细.选定 = " & forms![完工输入明细]![选定]+1 & " where "  & strwhere & ";"

 



宋冠平 发表于:2014-08-17 10:09:30

谢谢您的回答,我里面的forms![完工输入明细]![选定]字段是逻辑型的,fx是反选的意思

今天在公司我用你的代码试了一下,发现还是提示where子句语法错误。运行错误‘3145’。

不知道是不是where子句后面不能用变量来代替,我把strwhere的值用文本框显示出来,然后直接粘贴进去代码可以运行。




cspa 发表于:2014-08-17 16:37:00
把你的strwhere的值用文本框显示出来,然后直接粘贴到这儿来让大家帮你看看

宋冠平 发表于:2014-08-17 16:44:35

这个是复杂点的:

(((完工输入明细.客户名称 Not In ('博强','创新','丹阳小迪','海门邵刚','金长江')) And (完工输入明细.品名 Not In ('45#锻件','4Cr13','7Crsimnmov'))) Or ((完工输入明细.客户名称 Is Null) And (完工输入明细.品名 Not In ('45#锻件','4Cr13','7Crsimnmov'))) Or ((完工输入明细.客户名称 Not In ('博强','创新','丹阳小迪','海门邵刚','金长江')) And (完工输入明细.品名 Is Null)) Or ((完工输入明细.客户名称 Is Null) And (完工输入明细.品名 Is Null))) And (完工输入明细.公差 Not In ('.','32等高','35等高','40等高','50等高') Or 完工输入明细.公差 Is Null)

这个是简单点的:

((([完工输入明细].[客户名称]='创新'))) AND ([完工输入明细].[品名]='45#')

这些字段是文本型



litao 发表于:2014-08-18 10:11:39

fxsql = "UPDATE 完工输入明细 SET 完工输入明细.选定 = [完工输入明细]![选定]+1 where " &  strwhere & ")"

Debug.Print fxsql '输出变量


很常用的 SQL语句使用办法嘛!

语法错误,就在后面加一句:Debug.Print

从【立即窗口】复制出该 fxsql 内容,粘贴到【查询编辑器】中调试一下就好了!


这是在VBA语句中使用SQL的常规方法!






cspa 发表于:2014-08-18 10:47:03

好像不是where语句的问题,你改成这样试试:

fxsql = "UPDATE 完工输入明细 SET 完工输入明细.选定 = '" & iif(forms![完工输入明细]![选定]='yes','no','yes')  & "' where "  & strwhere & ";"



宋冠平 发表于:2014-08-18 12:35:44

我自己又把代码重新写了一遍,再按照楼上的改。运行一下就通过了

可能前面少了个标识符或空格,自己没有注意。

特别是"  & strwhere & ";"中的;,我还不知道怎么用

谢谢楼上的热心解答!



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