代码之家  ›  专栏  ›  技术社区  ›  Ian Stewart

Buffer表示,在使用BIND输入后,它不是数据集的一部分

  •  0
  • Ian Stewart  · 技术社区  · 8 年前

    我有一个数据集,我正在使用 BIND 。在该过程中,我需要在第一个数据集的临时表的子集上定义第二个数据集;然而,Progress不允许我在两个数据集中放置相同的缓冲区,因此我必须在旧temp表的新命名缓冲区上定义第二个数据集。然而,当我访问新命名缓冲区的句柄时,Progress告诉我缓冲区不是数据集的成员。(The DATASET 缓冲区句柄的属性 ? .)

    以下是我的程序:

    过程1.p:

    DEFINE TEMP-TABLE ttShifts NO-UNDO 
        FIELD shiftid AS INT
        FIELD emp AS CHAR.
    
    DEFINE TEMP-TABLE ttTasks NO-UNDO 
        FIELD taskid AS INT
        FIELD shiftid AS INT.
    
    DEFINE DATASET dsShifts
        FOR ttShifts, ttTasks
        DATA-RELATION relTask FOR ttShifts, ttTasks
            RELATION-FIELDS(ttShifts.shiftid, ttTasks.shiftid) NESTED.
    
    DEFINE VARIABLE lcJson AS LONGCHAR NO-UNDO.
    DEFINE VARIABLE hProc2 AS HANDLE NO-UNDO.
    
    ASSIGN lcJson = '~{"dsShifts":~{"ttShifts":[~{"shiftid":101,"emp":"Stewart","ttTasks":[~{"taskid":333,"shiftid":101}]}]}}'.
    
    DATASET dsShifts:READ-JSON("LONGCHAR", lcJson).
    
    RUN proc2.p PERSISTENT SET hProc2.
    RUN bindDsShifts IN hProc2 (INPUT DATASET dsShifts BIND).
    RUN runProc IN hProc2.
    DELETE PROCEDURE hProc2.
    

    过程2.p:

    DEFINE TEMP-TABLE ttShifts NO-UNDO REFERENCE-ONLY
        FIELD shiftid AS INT
        FIELD emp AS CHAR.
    
    DEFINE TEMP-TABLE ttTasks NO-UNDO REFERENCE-ONLY 
        FIELD taskid AS INT
        FIELD shiftid AS INT.
    
    DEFINE DATASET dsShiftsExt
        REFERENCE-ONLY
        FOR ttShifts, ttTasks
        DATA-RELATION relTask FOR ttShifts, ttTasks
            RELATION-FIELDS(ttShifts.shiftid, ttTasks.shiftid) NESTED.
    
    DEFINE BUFFER bfShifts FOR ttShifts.
    DEFINE DATASET dsShifts FOR bfShifts.
    
    PROCEDURE bindDsShifts:
        DEFINE INPUT PARAMETER DATASET FOR dsShiftsExt BIND.
    END.
    
    PROCEDURE runProc:
        DEFINE VARIABLE hDsShifts AS HANDLE NO-UNDO.
        DEFINE VARIABLE hBuf AS HANDLE NO-UNDO.
        ASSIGN 
            hDsShifts = DATASET dsShifts:HANDLE
            hBuf = hDsShifts:GET-BUFFER-HANDLE (1).
        MESSAGE VALID-HANDLE(hBuf:DATASET) VIEW-AS ALERT-BOX.
        /* here I expect YES but I see NO */
    END.
    

    有人能解释一下为什么最后 hBuf:DATASET 不是有效句柄?

    (在我的实际代码中,我正在尝试 ATTACH-DATA-SOURCE 这会失败,因为缓冲区可能不是数据集的一部分。)

    我正在运行OpenEdge 11.4。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mike Fechner    8 年前

    我已经在OpenEdge 11.3和OpenEdge 11.7(64位)上试用了您的代码。

    OpenEdge 11.3返回FALSE,OpenEdge 11.7返回TRUE。因此,这可能看起来像是同时修复的bug。如果您需要详细信息(以及在无法升级时可能需要修补程序,请联系Progress软件技术支持)。

    推荐文章