设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5565|回复: 7
打印 上一主题 下一主题

[模块/函数] 【Access小品】姊妹函数--自定义函数编制讲座四

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-31 13:49:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

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

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2011-5-31 15:05:50 | 只看该作者
坐上沙发!
3#
发表于 2011-5-31 15:22:02 | 只看该作者
回复 todaynew 的帖子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2011-5-31 21:13:30 | 只看该作者
版主辛苦了,学习!
5#
发表于 2011-6-5 18:36:06 | 只看该作者
很好!谢谢
6#
发表于 2011-7-6 19:39:43 | 只看该作者
学习!
7#
发表于 2011-7-6 21:32:10 | 只看该作者
学习,谢谢!!!
8#
发表于 2011-7-30 16:21:48 | 只看该作者
谢谢分享了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-16 21:23 , Processed in 0.090431 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表