根据你的意思,我编了个函数,在查询中使用即可得出你想要的结果。
但你的按姓名分组还不行,因为姓名重复的可能性相当大,所以,我用了个数组,这个数据你可以指定多个字段来限制某个姓名,例如,你可以用乡、村、社及姓名来限制某个人得出分组。示例函数如下:
'获得分组内的序号
'函数在查询中的示例如下(请查看“林权证数据转置为申请表数据 的副本”中的“宗地内业号”字段):
'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
点击下载此附件