I am using a split database. In the front end I am using the following code:
When I use
where StudentsExams is linked table
I get the following error:
91: Object variable or with block variable not set
Any help please?
Code:
Public Function RankList(ByVal TableName As String, _
ByVal Grp1Field As String, _
ByVal ValueField As String, _
Optional ByVal Grp2Field As String)
'-----------------------------------------------------------------
'Preparing Rank List
'Author : a.p.r.pillai
'Date : August 2011
'Rights : All Rights Reserved by www.msaccesstips.com
'Remarks: Free to use in your Projects
'-----------------------------------------------------------------
'Parameter List:
'TableName : Source Data Table
'Grp1Field : Category Group to Sort on
'ValueField : On which to determine the Rank Order
'Grp2Field : Sorted on for values with the same rank number
'-----------------------------------------------------------------
Dim db As Database, rst As Recordset, curntValue, prevValue
Dim srlRank As Byte, curntGrp1, prevGrp1
Dim prevGrp2, curntGrp2
Dim fld As Field, tbldef As TableDef, idx As Index
Dim FieldType As Integer
On Error Resume Next
Set db = CurrentDb
Set rst = db.OpenRecordset(TableName, dbOpenTable)
'Check for presence of Table Index "MyIndex"
'if not found then create
rst.Index = "MyIndex"
If Err > 0 Then
Err.Clear
On Error GoTo RankList_Err
Set tbldef = db.TableDefs(TableName)
Set idx = tbldef.CreateIndex("MyIndex")
FieldType = rst.Fields(Grp1Field).Type
Set fld = tbldef.CreateField(Grp1Field, FieldType)
idx.Fields.Append fld
FieldType = rst.Fields(ValueField).Type
Set fld = tbldef.CreateField(ValueField, FieldType)
fld.Attributes = dbDescending ' Line not required for sorting in Ascending
idx.Fields.Append fld
FieldType = rst.Fields(Grp2Field).Type
Set fld = tbldef.CreateField(Grp2Field, FieldType)
idx.Fields.Append fld
rst.Close
tbldef.Indexes.Append idx
tbldef.Indexes.Refresh
Set rst = db.OpenRecordset(TableName, dbOpenTable)
rst.Index = "MyIndex"
End If
curntGrp1 = rst.Fields(Grp1Field)
prevGrp1 = curntGrp1
curntValue = rst.Fields(ValueField).value
prevValue = curntValue
Do While Not rst.EOF
srlRank = 1
Do While (curntGrp1 = prevGrp1) And Not rst.EOF
If curntValue < prevValue Then
srlRank = srlRank + 1
End If
rst.Edit
rst![Rank] = srlRank
rst.Update
rst.MoveNext
If Not rst.EOF Then
curntGrp1 = rst.Fields(Grp1Field)
prevValue = curntValue
curntValue = rst.Fields(ValueField).value
End If
Loop
prevGrp1 = curntGrp1
prevValue = curntValue
Loop
rst.Close
'Delete the Temporary Index
tbldef.Indexes.Delete "MyIndex"
tbldef.Indexes.Refresh
Set rst = Nothing
Set db = Nothing
RankList_Exit:
Exit Function
RankList_Err:
MsgBox Err & " : " & Err.Description, , "RankList()"
Resume RankList_Exit
End Function
Code:
Public Function TestRank()
Call RankList("StudentsExams", "ClassID", "Result", "PaperID")
End Function
I get the following error:
91: Object variable or with block variable not set
Any help please?
Comment