Access交流中心

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

用VBA进行表数据筛选问题

初学者  发表于:2018-12-28 22:01:00  
复制

条件创建的一个临时表,有商品名称,采购时间,采购数量,采购价格等字段。

SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价

FROM 条件
GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价

HAVING (((DCount("ID","条件","商品名称='" & [商品名称] & "' AND 采购数量>=500"))>4));

以上通过创建查询,运行正常,但修改为;

sll="SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价" _
      & "FROM 条件" _
      & "GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价" _
      & "HAVING (((DCount('ID','条件','商品名称='" & [商品名称] & "' AND 采购数量>=500'))>4));"

DoCmd.RunSQL sll

提示错误“2465” 不能找到表达式中引用的字段。

如不加商品名称内容,不提示错误。望各位老师指导解决。谢谢!!


 

Top
伊西军 发表于:2018-12-28 23:39:27

应该是缺少空格的问题 添加上试一下

sll="SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价 " _
      & "FROM 条件 " _
      & "GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价 " _
      & "HAVING (((DCount('ID','条件','商品名称='" & [商品名称] & "' AND 采购数量>=500'))>4));"



Natsume Takashi 发表于:2018-12-29 08:12:17
DoCmd.RunSQL 不能运行select 查询

初学者 发表于:2018-12-29 08:43:23
谢谢,老师的指导!! 但对比了语句,没有发现在什么地方增加了空格,望老师能明示。

西出阳关无故人 发表于:2018-12-29 10:34:04
2楼 得分: 0

DoCmd.RunSQL 运行选择查询没有任何意义(只有运行操作查询才有意义)。就是说查询语句必须包含insert 、update、delete,或者drop...等关键字。

可以使用dao或ado的recordset获取数据,如果数据单一,也可以用dlookup等聚合函数获取数据。

把 DoCmd.RunSQL sql改为

me.子窗体.form.RecordSource=sql '也就是把窗体的数据源设为查询。




初学者 发表于:2018-12-29 12:04:04

对不起,上面的代码有错,我是希望按照此查询条件来生成一个临时表,代码更改如下:

sll="SELECT 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价 INTO 临时表 " _

      & "FROM 条件" _
      & "GROUP BY 条件.商品名称, 条件.采购时间, 条件.采购数量, 条件.采购单价" _
      & "HAVING (((DCount('ID','条件','商品名称='" & [商品名称] & "' AND 采购数量>=500'))>4));"

DoCmd.RunSQL sll

提示错误“2465” 不能找到表达式中引用的字段。

如不加商品名称内容,不提示错误。望各位老师指导解决。谢谢!!



Natsume Takashi 发表于:2018-12-29 13:47:43

你看看1楼的回答 先把空格补了把

建议上传附件看看  



初学者 发表于:2018-12-29 22:42:46
初学者愚钝,现上传附件,望老师指教,谢谢!!点击下载此附件

伊西军 发表于:2018-12-29 23:25:32
初学者 发表于:2018-12-30 15:10:37
谢谢伊西军老师,问题解决。但问题出在那里仍然没有明白,望老师能详细指导一下。

西出阳关无故人 发表于:2019-01-09 11:58:30

问题出在 

strsql =... 

  & "HAVING (DCount('ID','采购明细表','商品名称='" & [商品名称] & "' and 采购数量>=500')>=5);"  的 '" & [商品名称] & "'   这里。

按照你这种写法,vba把 [商品名称]当成当前窗体的一个可用的控件或函数或变量,暂且叫做东西吧,他的名字叫做“商品名称”,然后默认查找并获取这个东西的默认属性(一般窗体上的控件的默认属性是value,也就是控件的当前值),假如存在这个东西,且他的值为“诗歌”,运行后形成一个全新的strsql ,正常的情况下,可以在strsql =的下面增加一行 debug.print strsql,在立即窗口中就可以看到结果如下:

... HAVING (DCount('ID','采购明细表','商品名称='诗歌' and 采购数量>=500')>=5);

但是,你的程序中没有名称为“商品名称”的东西,自然就无法查找并获取这个东西的值,vba无法继续就报错了。还有,就算存在那个东西,'商品名称='诗歌' and 采购数量>=500'中的单引号还是不正确

如果你写成如下就能够达到目的:

strsql =... 

 & "HAVING (DCount('ID','采购明细表'," & """" & "商品名称='" & """" & " & [商品名称] & " & """" & "'  and 采购数量>=500" & """" & ")>=5);"

这里的[商品名称]就表示另外一个意思了,不是当成当前窗体的一个可用的控件或函数或变量,而是当成查询语句中的字段变量了。


在DoCmd.RunSQL strsql这一句之前,你可以用debug.print strsql语句,就会在立即窗口中得到以下sql语句:

...  HAVING (DCount('ID','采购明细表',"商品名称='" & [商品名称] & "'  and 采购数量>=500")>=5);

你可以把用sql语句做成查询,并在设计视图中体会一下。

当然,伊西军老师回复的是用SQLText函数简化了那么多引号的拼写。



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