|  | Posted by Russ Rose on 03/05/07 06:12 
"bubbles" <bubbles.one@hotmail.com> wrote in message news:1173068800.586859.21680@30g2000cwc.googlegroups.com...
 > Hi Guys n Gals,
 >
 > I am going to migrate an Access VBA application to SQL Server 2005.
 >
 > Essentially, what I need to do is to:
 >  * open a recordset
 >  * grab the ModelID and Age into variables
 >  * and use these variables to compare with the next record
 > then
 >  mark the current and previous records with the appropriate values.
 >
 > In Access, I was able to open a recordset, step through the records
 > one by one and make the necessary comparisons,
 >
 > calculations and updates.
 >
 >
 > Question:
 > =========
 > How can I achieve the same result with T-SQL?
 >
 
 Cursors would closely approximate what you are doing with the recordset but
 I would not recommend using them.
 
 If you are familiar with VBA you may find writing a VB.Net CLR function to
 be a useful learning expirience.
 
 The true solution is to use the power of the relational database by
 developing a "set-based" solution. Joining a table to itself where RecordID
 = RecordID - 1 is an easy way to compare a "current" row's data to a
 previous row.
 
 
 >
 >
 > Here is the code:
 >
 >
 >
 > Private Sub UpdateRecords()
 >   '===============
 >   '   Using DAO
 >   '===============
 >   Dim db as Database
 >   Dim rs as Recordset
 >   Dim intLastAge as Integer
 >   Dim intLastRecID as Integer
 >   Dim intLastModelID
 >
 >   Set db = Currentdb
 >
 >   '==============================
 >   '   Opens a recordset
 >   '   Data had been sorted by:
 >   '      ModelID, Age
 >   '==============================
 >   Set rs = db.OpenRecordset("someTableName")
 >
 >   With rs
 >
 >      txtLastModel = !LastModel
 >      intLastAge = !Age
 >      intLastID = !RecordID
 >      .MoveNext
 >
 >      Do Until .EOF
 >
 >
 > '===============================================================================
 >         '  Compare this record with the previous record
 >         '  If this record is of the same Model then
 >         '     If the Age is <= x days from the last record
 >         '        1. Mark this record's [Comment] as "Failed"
 >         '        2. Mark previous record's [Relate] with this
 > record's [RecID]
 >         '        3. Set the current record's [Age] as intLastAge
 >         '     ELse
 > '        1. Set the current record's [Age] as intLastAge
 >         '     End If
 >         '  Else
 >         '     1. Set this record's [ModelID] as intLastModelID
 >         '     2. Set this record's [Age] as intLastAge
 >         '  End If
 >
 > '===============================================================================
 >
 >         '=================
 >         ' If same ModelID
 >         '=================
 >         If !ModelID = intLastModelID Then
 >
 >            '=====================================================
 >            ' Check whether Age is <= 5 from the previous record
 >            '=====================================================
 >            If !Age <= (intLastAge + 5) Then
 >               '==========
 >               ' Age <= 5
 >               '==========
 >               intLastRecID = !RecID
 >                  '=============================
 >                  ' Mark [Comment] as "Failed"
 >                  '=============================
 >                  .Edit
 >                     !Comment = "Failed"
 >                  .Update
 >
 >
 > '=============================================================
 >                  ' Mark previous record's [Relate] with current
 > record's RecID
 >
 > '=============================================================
 >                  .MovePrevious
 >                  .Edit
 >                     !Relate = intLastRecID
 >                  .Update
 >
 >
 > '======================================================================
 >                  ' Grab the current record's [Age] for comparison
 > with the next record
 >
 > '======================================================================
 >                  .MoveNext
 >                  intLastAge = !Age
 >
 >            Else
 >
 > '=================================================================
 >               ' Age not <= 5
 >               ' Grab current record's [Age] for comparison with the
 > next record
 >
 > '=================================================================
 >               intLastAge = !Age
 >
 >
 >            End if
 >
 >         '=======================
 >         ' Not the same ModelID
 >         '=======================
 >         Else
 >
 > '==================================================================
 >            ' Grab the [ModelID] and [Age] for comparison with the
 > next record
 >
 > '==================================================================
 >            intLastModelID = !ModelID
 >            intLastAge = !Age
 >
 >         End If
 >
 >         .MoveNext
 >      Loop
 >   End With
 >
 >   rs.Close
 >   Set rs = Nothing
 >
 > End Sub
 >
  Navigation: [Reply to this message] |