首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正在进行的prodataset为5个表实现联接?

问如何使用正在进行的prodataset为5个表实现联接?
EN

Stack Overflow用户
提问于 2013-10-29 08:24:49
回答 1查看 3.8K关注 0票数 1

我有5个表,它们与父子关系有关。与table1 ->表2->table3->table4->->5一样,这里的箭头显示父到子关系。如何使用正在进行的prodataset从这些相关表中获取记录?如何定义此场景的查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-29 11:05:35

下面是一个连接了1个表的示例,只需使用第一种格式将更多的表添加到cQuery。

代码语言:javascript
复制
    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.

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

对于ProDataSets,需要定义临时表,然后创建ProDataSets

手册中的示例:

代码语言:javascript
复制
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 */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19653057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档