改好了,数据结构,自定义函数的参数对象,以及逻辑过滤的次序都理过了。下面的SQL语言测试下来没问题。
新建 查询表“结果2”
SELECT 结果.编号, 结果.项目编号, 结果.名称, 结果.项目, 结果.结果, 结果.结论, 结果.说明
FROM 结果
WHERE (((结果.结论)="不符合"))
ORDER BY 结果.编号, 结果.项目编号;
窗体加载
SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4, DDSUM("结果2","项目","编号",[编号]) AS 项目, IIf(信息!日期4 Is Null,"未",IIf([项目]<>"","不","合")) AS 结论
FROM 信息
ORDER BY 信息.编号;
具体见附件
点击下载此附件
还是不行 在窗体加载事件中会出错的
Dim dj As String
dj = "SELECT 信息.编号, 信息.日期1, 信息.单位, 信息.地址, 信息.日期4, DDSUM("结果2","项目","编号",[编号]) AS 项目, "& _
"IIf(信息!日期4 Is Null,'未',IIf([项目] <>"",'不','合')) AS 结论 FROM 信息 ORDER BY 信息.编号;"
Me.RecordSource = dj
Requery
我试了,是编译不能通过吧?估计因为 DDSUM() 是自定义函数,嵌入模块里引用的SQL语句中,编译不能识别而报错。直接把SQL语句放在窗体记录源属性里,加载倒是没问题。
如果不需要变换纪录源的话,可以按后面的方法做。
http://accessoft.com/bbs/showtopic.asp?ID=13043&BoardID=17
这帖里也发生自定义函数编译出错的问题,走不通,换了全局变量解决。
但你的目的不一样,解决办法没参考性。如果不需要开发很多套类似窗体的话,写在窗体属性里固定纪录源也不算麻烦,不必苛求VBA加载。
刚有看了你表里的数据,疏忽了不同的用具会有相同的检查项目,否则结论里的不符合项目会有重复,因此结果2 需要分组。需要用下面的代码。
SELECT 结果.编号, 结果.项目编号, 结果.项目, 结果.结论
FROM 结果
GROUP BY 结果.编号, 结果.项目编号, 结果.项目, 结果.结论
HAVING (((结果.结论)="不符合"))
ORDER BY 结果.编号, 结果.项目编号;
请西出阳关无故人帮助修改一下 谢谢!
不知道你要干什么(哪个窗体的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
楼主还没来,示例是我改的,这个也是我关心的一个话题,所以我知道要干什么,楼主要求在登记窗体的源数据栏里不写入SQL语句,在加载窗体时给予源数据,估计是多套数据要调用这个窗体,之前怀疑嵌在字串中的自定义函数不能被编译通过,没有细究编码的层续,按西出阳关兄的指点,问题解决了。我已把示例改好了传上来了。
首先总结一下
窗体属性纪录源栏里可直接写入前面的SQL语句,在VBA里要先写字符串,编译后成为前面的SQL语句,再加载给窗体,所以函数不能在未被编译前直接以函数的形式出现,只有到窗体加载时才能以函数的形式出现,之前只能是拼接的字符串,否则就出错了。
经西出阳关兄的指点,也解了我心中的疑惑,这类情况之前我也没遇到过,在这里长知识了。
还要赞一下西出阳关兄的“焊接工艺”精深,思路缜密。
楼主没来之前,我先代表楼主和我自己谢谢西出阳关兄!祝春节快乐!
点击下载此附件
谢谢西出阳关和浪淘沙
总记录:9篇 页次:1/1 9 1 :