Access交流中心

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

请教按姓名分组循环编号的查询问题?

pzszdy  发表于:2010-05-23 12:54:23  
复制

原表的宗地外业号有些问题,多是按每农户1-6循环编号,但有的又不准确,所以可以忽略,我的目的是:

按农户分组重新生成宗地外业号"a.b",a是该宗地在该农户所有宗地内的顺序号,b是宗地总数。

我现在的困难在a上,请大家帮忙看看

 

Top
pzszdy 发表于:2010-05-23 12:55:16
陈福祥 发表于:2010-05-23 18:56:13

根据你的意思,我编了个函数,在查询中使用即可得出你想要的结果。

但你的按姓名分组还不行,因为姓名重复的可能性相当大,所以,我用了个数组,这个数据你可以指定多个字段来限制某个姓名,例如,你可以用乡、村、社及姓名来限制某个人得出分组。示例函数如下:

 

'获得分组内的序号

'函数在查询中的示例如下(请查看“林权证数据转置为申请表数据 的副本”中的“宗地内业号”字段):

'getGrpIndex("申请表数据 林权证数据查询生成","宗地内业号",[宗地内业号],"乡镇",[申请表数据 林权证数据查询生成].[乡镇],"村",[申请表数据 林权证数据查询生成].[村],"社",[申请表数据 林权证数据查询生成].[社],"林地坐落",[申请表数据 林权证数据查询生成].[林地坐落],"单位(个人)",[申请表数据 林权证数据查询生成].[单位(个人)])

'函数参数说明:

'TableName:获取数据的表名

'indexFld :在分组内,能唯一标识分组内序号的字段名

'indexFldVal:在分组内,唯一标识分组内序号的字段的当前值,即以它来返回分组内的序号

'GroupFlds:是一个数组,必须成对出现,而且出现的规则是:前一个是字段名,紧跟着是此字段的当前值

'如果不是在查询中,而是直接使用,则示例如下(下面这条示例语句可以“立即”窗口中测试):

'getGrpIndex("申请表数据 林权证数据查询生成","宗地外业号","1","乡镇","游仙区白蝉乡","村","游仙区白蝉乡石华山村","社","1组","林地坐落","白蝉乡石华山村1组","单位(个人)","贾如君")

'======================================================================
'注:此函数中参数中的字段,不能有空值,如果有空值,可能会出错

'希望你能看明白这个函数的使用方法
'======================================================================

Function getGrpIndex(TableName As String, indexFld As String, indexFldVal As Variant, ParamArray GroupFlds()) As Integer
    Dim Rs As DAO.Recordset
    Dim i As Integer
    Dim n As Integer
    Dim strSql As String
    Dim strW As String
    Dim F As String
   
    strW = ""
    i = UBound(GroupFlds, 1)
    If (i > 0) And ((i + 1) Mod 2 = 0) Then
        For n = 0 To i Step 2
            strW = strW & "[" & GroupFlds(n) & "] = '" & GroupFlds(n + 1) & "'  and "
        Next n
        strW = " Where " & Left(strW, Len(strW) - 5)
    End If
   
    strSql = "Select [" & indexFld & "] From [" & TableName & "] " & strW
    Set Rs = CurrentDb.OpenRecordset(strSql)
   
    Select Case Rs.Fields(indexFld).Type
        Case dbDate, dbTime  '日期/时间型
            F = "[" & indexFld & "]=#" & indexFldVal & "#"
        Case dbText, dbMemo  '文本型
            F = "[" & indexFld & "]='" & indexFldVal & "'"
        Case Else
            F = "[" & indexFld & "]=" & indexFldVal & ""
    End Select
    Rs.FindFirst F
    getGrpIndex = Rs.AbsolutePosition + 1
    Set Rs = Nothing
End Function

 

点击下载此附件

pzszdy 发表于:2010-05-23 20:12:52
太好了,我认真学习!

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