Access交流中心

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

SQL查询问题

一过客  发表于:2011-12-14 19:34:44  
复制

向高手请教:以下SQL查询在窗体的加载事件中应如何写:谢谢!

直接引用会出错

 

SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4,

DDSUM("说明","项目","编号",[编号]) AS 项目, IIf(信息!日期4 Is Null,

"未",IIf([项目]<>"","不","合")) AS 结论 FROM 信息 ORDER BY 信息.编号;

点击下载此附件

 

Top
浪淘沙 发表于:2011-12-16 01:10:17

改好了,数据结构,自定义函数的参数对象,以及逻辑过滤的次序都理过了。下面的SQL语言测试下来没问题。

 

新建 查询表“结果2”

 

SELECT 结果.编号, 结果.项目编号, 结果.名称, 结果.项目, 结果.结果, 结果.结论, 结果.说明
FROM 结果
WHERE (((结果.结论)="不符合"))
ORDER BY 结果.编号, 结果.项目编号;

 

窗体加载

 

SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4, DDSUM("结果2","项目","编号",[编号]) AS 项目, IIf(信息!日期4 Is Null,"未",IIf([项目]<>"","不","合")) AS 结论
FROM 信息
ORDER BY 信息.编号;

 

具体见附件

点击下载此附件

一过客 发表于:2011-12-16 09:27:57

还是不行 在窗体加载事件中会出错的

Dim dj As String
    dj = "SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4, DDSUM("结果2","项目","编号",[编号]) AS 项目, "& _

         "IIf(信息!日期4 Is Null,'未',IIf([项目] <>"",'不','合')) AS 结论 FROM 信息 ORDER BY 信息.编号;"

Me.RecordSource = dj
Requery



浪淘沙 发表于:2011-12-16 11:48:58

我试了,是编译不能通过吧?估计因为 DDSUM() 是自定义函数,嵌入模块里引用的SQL语句中,编译不能识别而报错。直接把SQL语句放在窗体记录源属性里,加载倒是没问题。

如果不需要变换纪录源的话,可以按后面的方法做。



浪淘沙 发表于:2011-12-17 00:29:00

http://accessoft.com/bbs/showtopic.asp?ID=13043&BoardID=17 

这帖里也发生自定义函数编译出错的问题,走不通,换了全局变量解决。

 

但你的目的不一样,解决办法没参考性。如果不需要开发很多套类似窗体的话,写在窗体属性里固定纪录源也不算麻烦,不必苛求VBA加载。

 

刚有看了你表里的数据,疏忽了不同的用具会有相同的检查项目,否则结论里的不符合项目会有重复,因此结果2 需要分组。需要用下面的代码。

 

SELECT 结果.编号, 结果.项目编号, 结果.项目, 结果.结论
FROM 结果
GROUP BY 结果.编号, 结果.项目编号, 结果.项目, 结果.结论
HAVING (((结果.结论)="不符合"))
ORDER BY 结果.编号, 结果.项目编号;

 

 



西出阳关无故人 发表于:2011-12-17 20:50:31

你的dj="...."写法有误!



一过客 发表于:2011-12-22 14:26:38
请西出阳关无故人帮助修改一下 谢谢!

西出阳关无故人 发表于:2012-01-14 14:04:38

不知道你要干什么(哪个窗体的RecordSource = dj),不过写成下面的就可以运行

Dim dj As String
    dj = "SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4, DDSUM(" & """" & "结果2" & """" & "," & """" & "项目" & """" & "," & """" & "编号" & """" & ",[编号]) AS 项目, " & _
         "IIf(信息!日期4 Is Null,'未',IIf([项目] <>'','不','合')) AS 结论 FROM 信息 ORDER BY 信息.编号;"
Me.RecordSource = dj
Requery



浪淘沙 发表于:2012-01-14 16:35:58

楼主还没来,示例是我改的,这个也是我关心的一个话题,所以我知道要干什么,楼主要求在登记窗体的源数据栏里不写入SQL语句,在加载窗体时给予源数据,估计是多套数据要调用这个窗体,之前怀疑嵌在字串中的自定义函数不能被编译通过,没有细究编码的层续,按西出阳关兄的指点,问题解决了。我已把示例改好了传上来了。

 

首先总结一下

 窗体属性纪录源栏里可直接写入前面的SQL语句,在VBA里要先写字符串,编译后成为前面的SQL语句,再加载给窗体,所以函数不能在未被编译前直接以函数的形式出现,只有到窗体加载时才能以函数的形式出现,之前只能是拼接的字符串,否则就出错了。   

经西出阳关兄的指点,也解了我心中的疑惑,这类情况之前我也没遇到过,在这里长知识了。

 

还要赞一下西出阳关兄的“焊接工艺”精深,思路缜密。

楼主没来之前,我先代表楼主和我自己谢谢西出阳关兄!祝春节快乐!

点击下载此附件

一过客 发表于:2012-01-16 09:25:14
谢谢西出阳关和浪淘沙

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