User Tools

Site Tools


queryclass_conceptual_example.htm
Navigation:  ABC Library Reference > QueryClass >====== QueryClass Conceptual Example C6H0009.jpg ====== Previous pageReturn to chapter overviewNext page

The following example shows a typical sequence of statements to declare, instantiate, initialize, use, and terminate a QueryClass object and related objects. The example plugs a QueryClass into a BrowseClass object. The QueryClass object simply filters on the current record.

Note that the WindowManager and BrowseClass objects internally handle the normal events surrounding the query.

PROGRAM

_ABCDllMode_  EQUATE(0)

_ABCLinkMode_ EQUATE(1)

INCLUDE('ABWINDOW.INC')

INCLUDE('ABBROWSE.INC')

INCLUDE('ABQUERY.INC')

MAP

END

GlobalErrors   ErrorClass

Access:Customer CLASS(FileManager)

Init             PROCEDURE

               END

Relate:Customer CLASS(RelationManager)

Init             PROCEDURE

Kill             PROCEDURE,VIRTUAL

               END

GlobalRequest  BYTE(0),THREAD

GlobalResponse BYTE(0),THREAD

VCRRequest     LONG(0),THREAD

Customer    FILE,DRIVER('TOPSPEED'),PRE(CUS),CREATE,THREAD

CustomerIDKey  KEY(CUS:ID),NOCASE,OPT,PRIMARY

NameKey        KEY(CUS:LastName),NOCASE,OPT

Record         RECORD,PRE()

ID              LONG

LastName        STRING(20)

FirstName       STRING(15)

City            STRING(20)

State           STRING(2)

ZIP             STRING(10)

              END

           END

CustView    VIEW(Customer)

           END

CustQ      QUEUE

CUS:LastName  LIKE(CUS:LastName)

CUS:FirstName LIKE(CUS:FirstName)

CUS:ZIP       LIKE(CUS:ZIP)

CUS:State     LIKE(CUS:State)

ViewPosition  STRING(1024)

          END

CusWindow  WINDOW('Browse Customers'),AT(,,210,105),IMM,SYSTEM,GRAY

           LIST,AT(5,5,200,80),USE(?CusList),IMM,HVSCROLL,FROM(CustQ),|

           FORMAT('80L(2)|M~Last~@s20@64L(2)|M~First~@s15@44L(2)|M~ZIP~@s10@')

           BUTTON('&Zoom In'),AT(50,88),USE(?Query)

           BUTTON('Close'),AT(90,88),USE(?Close)

          END

ThisWindow  CLASS(WindowManager)   !declare ThisWindow object

Init         PROCEDURE(),BYTE,PROC,VIRTUAL

Kill         PROCEDURE(),BYTE,PROC,VIRTUAL

           END

Query     QueryClass               !declare Query object

BRW1      CLASS(BrowseClass)       !declare BRW1 object  

Q          &CustQ

         END

CODE

GlobalErrors.Init

Relate:Customer.Init

GlobalResponse = ThisWindow.Run()          !ThisWindow handles all events

Relate:Customer.Kill

GlobalErrors.Kill

ThisWindow.Init  PROCEDURE()

ReturnValue    BYTE,AUTO

CODE

ReturnValue = PARENT.Init()

IF ReturnValue THEN RETURN ReturnValue.

SELF.FirstField = ?CusList

SELF.VCRRequest &= VCRRequest

SELF.Errors &= GlobalErrors

SELF.AddItem(?Close,RequestCancelled)

Relate:Customer.Open

BRW1.Init(?CusList,CustQ.ViewPosition,CustView,CustQ,Relate:Customer,ThisWindow)

OPEN(CusWindow)

SELF.Opened=True

Query.Init                             !initialize the Query object

BRW1.Q &= CustQ

BRW1.AddSortOrder(,CUS:NameKey)

BRW1.AddField(CUS:LastName,BRW1.Q.CUS:LastName)

BRW1.AddField(CUS:FirstName,BRW1.Q.CUS:FirstName)

BRW1.AddField(CUS:ZIP,BRW1.Q.CUS:ZIP)

BRW1.QueryControl = ?Query             !register Query button w/ BRW1

BRW1.UpdateQuery(Query)                !make each BRW1 field queryable

Query.AddItem('CUS:State','')          !make State field queryable too

SELF.SetAlerts()

RETURN ReturnValue

ThisWindow.Kill  PROCEDURE()

ReturnValue    BYTE,AUTO

CODE

ReturnValue = PARENT.Kill()

IF ReturnValue THEN RETURN ReturnValue.

Relate:Customer.Close

RETURN ReturnValue

Access:Customer.Init PROCEDURE

CODE

PARENT.Init(Customer,GlobalErrors)

SELF.FileNameValue = 'Customer'

SELF.Buffer &= CUS:Record

SELF.Create = 1

SELF.AddKey(CUS:CustomerIDKey,'CUS:CustomerIDKey',1)

SELF.AddKey(CUS:NameKey,'CUS:NameKey',0)

Relate:Customer.Init PROCEDURE

CODE

Access:Customer.Init

PARENT.Init(Access:Customer,1)

Relate:Customer.Kill PROCEDURE

CODE

Access:Customer.Kill

PARENT.Kill

queryclass_conceptual_example.htm.txt · Last modified: 2021/04/15 15:57 by 127.0.0.1