【问题标题】:Dynamic Query in OpenEdgeOpenEdge 中的动态查询
【发布时间】:2018-09-19 23:40:13
【问题描述】:

美好的一天:

快速提问:我可以在 OpenEdge 中执行动态查询吗?

例子:

def temp-table tt-num1
field f1 as int
field f2 as int.

def temp-table tt-num2
field f1 as int
field f2 as int.

def temp-table tt-num3
field f1 as int
field f2 as int.

我需要的是这样的东西:

procedure repeat-query:
for each 'variable that contains table-name' no-lock.

disp f1 f2.

end.
end procedure.

或其他可以解决我的问题的方法。

我该如何进行呢?我试图检查互联网上的动态查询,但没有运气。提前致谢。

【问题讨论】:

    标签: openedge progress-4gl dynamicquery


    【解决方案1】:

    如果您直接访问https://documentation.progress.com/#page/progdocindex%2Fopenedge.html,您可以找到有关所有 OpenEdge 的文档。例如动态查询。

    我不完全理解您尝试做什么,但这是一个动态查询的示例。

    DEFINE TEMP-TABLE tt-num1 NO-UNDO
        FIELD f1 AS INTEGER
        FIELD f2 AS INTEGER.
    
    DEFINE TEMP-TABLE tt-num2 NO-UNDO
        FIELD f1 AS INTEGER
        FIELD f2 AS INTEGER.
    
    DEFINE TEMP-TABLE tt-num3 NO-UNDO
        FIELD f1 AS INTEGER
        FIELD f2 AS INTEGER.
    
    
    CREATE tt-num1.
    ASSIGN 
        tt-num1.f1 = 1
        tt-num1.f2 = 1.
    
    CREATE tt-num1.
    ASSIGN 
        tt-num1.f1 = 1
        tt-num1.f2 = 2.
    
    CREATE tt-num1.
    ASSIGN 
        tt-num1.f1 = 2
        tt-num1.f2 = 1.
    
    CREATE tt-num1.
    ASSIGN 
        tt-num1.f1 = 2
        tt-num1.f2 = 2.
    
    DEFINE VARIABLE hQuery  AS HANDLE      NO-UNDO.
    DEFINE VARIABLE cBuffer AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE cField  AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE iValue  AS INTEGER     NO-UNDO.
    
    ASSIGN 
        cBuffer = "tt-num1"
        cField  = "f1"
        iValue  = 1.
    
    CREATE QUERY hQuery.
    
    hQuery:ADD-BUFFER(cBuffer).
    hQuery:QUERY-PREPARE("for each " + cBuffer + " where " + cBuffer + "." + cField + " = " + STRING(iValue)).
    hQuery:QUERY-OPEN().
    
    queryLoop:
    REPEAT:
        hQuery:GET-NEXT().
    
        IF hQuery:QUERY-OFF-END THEN LEAVE queryLoop.
    
        DISPLAY hQuery:GET-BUFFER-HANDLE(1):BUFFER-FIELD(cField):BUFFER-VALUE.
    END.
    hQuery:QUERY-CLOSE().
    
    DELETE OBJECT hQuery.
    

    正如 Stefan Drssen 在一个非常有效的评论中提到的那样:循环可以更紧凑:

    DO WHILE hQuery:GET-NEXT():
        /* Code goes here */
    END.
    

    【讨论】:

    • 我更喜欢让 get-next 部分成为 while - 让事情保持整洁,不需要查询结束。重复 while hQuery:get-next(): display ... end.
    • @StefanDrissen 我可以使用动态查询来创建记录吗?像 CREATE tt-num1 一样,我可以用缓冲区做这个吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 2012-03-19
    • 2021-05-07
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2013-03-26
    相关资源
    最近更新 更多