Question

I have 5 tables which are related with parent child relationship. like table1 -> table2->table3->table4->table5, here arrow shows parent to child relation. how can i fetch records from these related tables using prodataset in progress 4GL? how can i define queries for this scenario?

Was it helpful?

Solution

Here is an example with 1 table joined, just add more tables to cQuery using the ,FIRST format.

    ASSIGN
      cQuery = "FOR EACH table1 NO-LOCK ":U
             + "   WHERE table1.product_obj = ":U + QUOTER(cProduct)
             + "     AND table1.role_obj    = ":U + QUOTER(cRole)
             + "  ,FIRST table2 NO-LOCK ":U
             + "   WHERE table2.criterion_obj = table1.criterion_obj":U.

    hQuery:SET-BUFFERS(BUFFER table1:HANDLE, BUFFER table2:HANDLE).

    hQuery:QUERY-PREPARE(cQuery) NO-ERROR.
    hQuery:QUERY-OPEN() NO-ERROR.
    hQuery:GET-FIRST() NO-ERROR.

    DO  WHILE NOT hQuery:QUERY-OFF-END:
        <put logic here>
        hQuery:GET-NEXT() NO-ERROR.
    END.

============

For ProDataSets you will need to define your temp-tables then create the ProDataSets

example from manual:

DEFINE TEMP-TABLE ttOrder LIKE Order
    FIELD OrderTotal AS DECIMAL
    FIELD CustName LIKE Customer.NAME
    FIELD RepName LIKE SalesRep.RepName.

DEFINE TEMP-TABLE ttOline LIKE OrderLine.

DEFINE TEMP-TABLE ttItem
    FIELD ItemNum LIKE ITEM.ItemNum
    FIELD ItemName LIKE ITEM.ItemName
    FIELD Price LIKE ITEM.Price
    FIELD Weight LIKE ITEM.Weight
    FIELD OnHand LIKE ITEM.OnHand
    FIELD OnOrder LIKE ITEM.OnOrder.

DEFINE DATASET dsOrder FOR ttOrder, ttOline, ttItem
DATA-RELATION OrderLine FOR ttOrder, ttOline
RELATION-FIELDS (OrderNum, OrderNum)
DATA-RELATION LineItem FOR ttOline, ttItem
RELATION-FIELDS (ItemNum, ItemNum).

DEFINE VARIABLE hDSOrder AS HANDLE NO-UNDO.
hDSOrder = DATASET dsOrder:HANDLE.

DEFINE QUERY qOrder FOR Order, Customer, SalesRep.
DEFINE QUERY qItem FOR ITEM.
DEFINE DATA-SOURCE srcOrder FOR QUERY qOrder
Order KEYS (OrderNum), Customer KEYS (CustNum), SalesRep KEYS (SalesRep).
DEFINE DATA-SOURCE srcOline FOR OrderLine.
DEFINE DATA-SOURCE srcItem FOR QUERY qItem ITEM KEYS (ItemNum).

BUFFER ttOrder:ATTACH-DATA-SOURCE(DATA-SOURCE srcOrder:HANDLE,
"Customer.Name,CustName").
BUFFER ttOline:ATTACH-DATA-SOURCE(DATA-SOURCE srcOline:HANDLE).
BUFFER ttItem:ATTACH-DATA-SOURCE(DATA-SOURCE srcItem:HANDLE).

QUERY qOrder:QUERY-PREPARE("FOR EACH Order WHERE Order.OrderNum = 1, " +
    "FIRST Customer OF Order, FIRST SalesRep OF Order"). /* setup query to fill 
     dataset */

hDSOrder:FILL(). /* fill the ProDataSet as a whole */
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top