Office中国论坛/Access中国论坛

标题: 【Access小品】姊妹函数--自定义函数编制讲座四 [打印本页]

作者: todaynew    时间: 2011-5-31 13:49
标题: 【Access小品】姊妹函数--自定义函数编制讲座四
本帖最后由 todaynew 于 2011-5-31 13:49 编辑

  域函数很有用处,可以对记录做纵向的分类统计。不过域函数还是不能全部的应付各类纵向的分类处理,比如分类联接字符型数据,再比如分类连乘等等。这种情况下我们可以采用ADO记录集来处理此类问题,而且这种类型的函数你只要会编写一个,就能举一反三的解决若干个同类问题。

  前不久,煮茶论道同志问了一个关于分类联接字符串的问题,问题如下:
------------------------------
表中有记录如下:
姓名 科目
张三 语文
张三 数学

“张三”有两条记录,我想转换成 张三 语文 数学 成为一条记录
-------------------------------
  
  对于这个问题,可以写一个自定义函数如下:
Function DDSUM(tbname as string,fldname as string,fldIDname as string,StrID As String) as string
'示例:select 姓名 & " " & DDSUM("课程表","学科","姓名",[姓名]) from 课程表 group by 姓名
Dim rs As New ADODB.Recordset
Dim ssql As String
Dim i As Long
Dim s as string
ssql = "select " & fldname & " from " & tbname & " where Cstr(" & fldIDname & ")='" & strID & "'"
rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
for i=1 to rs.recordcount
    DDSUM=DDSUM & rs.Fields(fldname).value & " "
    rs.movenext
next
DDSUM=left(DDSUM,len(DDSUM)-1)
rs.close
set rs=nothing
end function
-------------------------------
  其后,版友liqianwu同志又问了一个从工序合格率,计算产品合格率的问题,也就是分类连乘的问题。对于这个问题,可以将上面的函数稍作修改,写成如下:

Function Multiply(tbname As String, fldname As String, fldIDname As String, StrID As String) As String
'示例:select 产品,Multiply("生产表","合格率","产品",[产品]) as 产品合格率 from 生产表 group by 产品
Dim rs As New ADODB.Recordset
Dim ssql As String
Dim i As Long
Dim s As String
ssql = "select " & fldname & " from " & tbname & " where Cstr(" & fldIDname & ")='" & StrID & "'"
rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Multiply = 1
For i = 1 To rs.RecordCount
    Multiply = Multiply * rs.Fields(fldname).Value
    rs.MoveNext
Next
rs.Close
Set rs = Nothing
End Function

-------------------------------
  可以看出,两个函数的结构基本一致,只是在循环体中的语句稍做了修改,我们可以把这样一类的函数叫做姊妹函数。在编程过程中,我们经常的会遇到很多类似和相近的问题,解决这些问题的时候,我们不能采取狗熊掰苞米,掰一个丢一个。要善于从以往的经验中获取经验,举一反三得解决问题。只有这样开发的效率才能提高,也才能在不断的积累中,提高自己的能力。


作者: tmtony    时间: 2011-5-31 15:05
坐上沙发!
作者: sgrshh29    时间: 2011-5-31 15:22
回复 todaynew 的帖子

[attach]45748[/attach]
作者: ycxchen    时间: 2011-5-31 21:13
版主辛苦了,学习!
作者: yanwei82123300    时间: 2011-6-5 18:36
很好!谢谢
作者: 飓风    时间: 2011-7-6 19:39
学习!
作者: marshhappy    时间: 2011-7-6 21:32
学习,谢谢!!!
作者: yanghua1900363    时间: 2011-7-30 16:21
谢谢分享了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3