Tom Keatley
tom at rbbs.net.au
Sun Nov 28 21:45:05 CST 2004
Hi all...
I have built a function that seems to achieve my aims although I feel it
looks a little clunky...
Its purpose is to reduce the data of 4 records in a table (NUMBERS) to a
single record in another table (Table4up) with a view to using that data on
a report 4 up.
Can anyone suggest a better/more efficient way to achieve my aims? The code
as is will not handle less than 9 records and I realise its not finished as
there is no error checking or setting variables to NOTHING but wanted to get
the groups feeling about the efficiency. This code will form the heart of a
new project I am working on and I want it to be the best way possible to do
it.....
Function REnder4UPnew()
Dim Db As Database, Rs As Recordset
Dim RsAdd As Recordset
Dim Nos As String
Dim NoRecs As Long
Dim FourUp As String
Dim Counter As Integer
Dim DElQry As String
Dim ModNo As Integer
DElQry = "DELETE Table4UP.* FROM Table4UP;"
DoCmd.RunSQL DElQry
Nos = "SELECT NUMBERS.* FROM NUMBERS ORDER BY NUMBERS.IDNO;"
FourUp = "SELECT Table4UP.* FROM Table4UP;"
Set Db = CurrentDb
Set Rs = Db.OpenRecordset(Nos)
Set RsAdd = Db.OpenRecordset(FourUp)
With Rs
.MoveFirst
.MoveLast
NoRecs = .RecordCount
ModNo = NoRecs Mod 4
Select Case ModNo
Case 0
NoRecs = Int(.RecordCount / 4)
Case 1
NoRecs = Int(.RecordCount / 4) + 1
Case 2
NoRecs = Int(.RecordCount / 4) + 1
Case 3
NoRecs = Int(.RecordCount / 4) + 1
End Select
Counter = 0
....MoveFirst
While Not .EOF Or .BOF
Counter = Counter + 1
Select Case Counter
Case 1 To NoRecs
RsAdd.AddNew
RsAdd!sequence = Counter
RsAdd!Pos1 = ![idno]
RsAdd.Update
Case (NoRecs + 1) To (NoRecs * 2)
If Counter = (NoRecs + 1) Then
RsAdd.MoveFirst
RsAdd.Edit
RsAdd!Pos2 = ![idno]
RsAdd.Update
RsAdd.MoveNext
Else
RsAdd.Edit
RsAdd!Pos2 = ![idno]
RsAdd.Update
RsAdd.MoveNext
End If
Case ((NoRecs * 2) + 1) To (NoRecs * 3)
If Counter = ((NoRecs * 2) + 1) Then
RsAdd.MoveFirst
RsAdd.Edit
RsAdd!Pos3 = ![idno]
RsAdd.Update
RsAdd.MoveNext
Else
RsAdd.Edit
RsAdd!Pos3 = ![idno]
RsAdd.Update
RsAdd.MoveNext
End If
Case ((NoRecs * 3) + 1) To (NoRecs * 4)
If Counter = ((NoRecs * 3) + 1) Then
RsAdd.MoveFirst
RsAdd.Edit
RsAdd!Pos4 = ![idno]
RsAdd.Update
RsAdd.MoveNext
Else
RsAdd.Edit
RsAdd!Pos4 = ![idno]
RsAdd.Update
RsAdd.MoveNext
End If
End Select
....MoveNext
Wend
End With
Select Case ModNo
Case 1
RsAdd.Edit
RsAdd!Pos4 = 9997
RsAdd.Update
RsAdd.MoveNext
RsAdd.Edit
RsAdd!Pos4 = 9998
RsAdd.Update
RsAdd.MoveNext
RsAdd.Edit
RsAdd!Pos4 = 9999
RsAdd.Update
Case 2
RsAdd.Edit
RsAdd!Pos4 = 9997
RsAdd.Update
RsAdd.MoveNext
RsAdd.Edit
RsAdd!Pos4 = 9998
RsAdd.Update
Case 3
RsAdd.Edit
RsAdd!Pos4 = 9997
RsAdd.Update
End Select
End Function
Thanks In Anticipation
Tom Keatley