` Printed Icetips Article

Icetips Article



ABC: Moving records up or down
1999-02-10 -- Jim Kane
 
Newsgroups: TopSpeed.Topic.Design

> Throughout the CW environment there are up and down arrow buttons that
> change the order of items.  I would like to implement that from within a CW
> application.  Is there a clean way to do this?

This is my code from an up button on a file loaded browse on a form:
PageNum field was never shown so 'skips' didnt matter.
Keys:
by_formID
\_formid, PageNum - unique
by_pageId
\-PageID - unique
      !Variables Required
      !Save:PgId  Long     !Save the one field in the primary key
      !CurPg      Short    !Save the Field ordering is on in the Choice() record
      !OtherPg    Short    !Save the Field ordering is on in the Choice()-1 record

      If Choice(?browse:2)        !if anything is choosen in the box

        !Get the choosen record in the listbox
        Brw2.Updatebuffer()       !Get the choosen record - dont arm watch
        Save:Pgid = pg:PageId     !Save the pageID of the choosen record
        CurPg     = pg:Pagenum    !Save the pageNum of the Choosen Record

        !Get the previous record
        RESET(Brw2.View,Queue:Browse:2.ViewPosition)
        If Brw2.Previous()<>Level:Benign then Select(?Browse:2);cycle. !reRead same
record
        if Brw2.Previous()<>level:benign then Select(?Browse:2);cycle. !no previous
record

        !Change the Previous record to have the same page number as the current record
        !keys can not be unique
        OtherPg=PG:PageNum        !Save the pageNum for the previous record
        Pg:PageNum = CurPg        !Give this page the others number
        Logout(2,FBPage)          !Start a logout
        If errorcode() then       !On error reget the original record
          PG:PageId=Save:Pgid
          Access:FBPage.Tryfetch(Pg:By_pageID)
          Select(?Browse:2)
          Cycle                    !Abort
        end
        BreakLogout=False          !Flag that no error happened yet

        !Save the previous record with the new pagenumber
        If Access:FBPage.TryUpdate()<>Level:Benign then
          Rollback()                !On error rollback and restore the original record
          PG:PageId=Save:Pgid
          Access:FBPage.Tryfetch(Pg:By_pageID)
          Select(?Browse:2)
          cycle
        end

        !Reget the original record and change it.
        PG:PageId=Save:Pgid
        IF Access:FBPage.Tryfetch(Pg:By_pageID)<>Level:benign then
          !on error, rollback
          Breaklogout=true
          RollBack() !dont cycle - want to flush the view since something was saved
        Else
          PG:PageNum = OtherPG
          IF Access:FBPage.TryUpdate()<>Level:Benign then
            !On error RollBack
            Breaklogout=true
            Rollback()
          end
        End

        !if no errors keep the changes
        If not Breaklogout then
          Commit()
        End

        !Flush the View and Reset the browse
        Flush(Brw2.View)
        BRW2.ResetFromFile()
        BRW2.PostNewSelection()
        !If there were multiple browses on the window then ThisWindow.Reset(1).
        Select(Brw2.ListControl)
      end

Down buttons a simple variation on the theme.
HTH,
---
Jim Kane



Printed May 7, 2024, 9:47 am
This article has been viewed/printed 35121 times.
Google search has resulted in 71 hits on this article since January 25, 2004.