【问题标题】:Which tool of Progress Developer Studio for OpenEdge can I use for testing ABL queries?我可以使用 Progress Developer Studio for OpenEdge 的哪个工具来测试 ABL 查询?
【发布时间】:2021-01-05 15:31:37
【问题描述】:

我刚刚写了以下错误的 ABL 查询:

FOR EACH T1 (WHERE T1.some-date = ' ')  AND 
            (integer(T1.num1) >= 100) AND 
            (integer(T1.num1) <= 200) AND 
            (T1.some-other-date = 01/12/2021) AND 
            (T2.Name = itsme), 
    EACH T2 WHERE T2.num2 = T1.num2 
    BY T1.num1

如您所见,这是错误的,因为我将第一个括号放在“WHERE”前面而不是后面。最重要的是,我的名字“itsme”没有放在引号之间,所以 ABL 查询永远不会工作。

我一直在查看我的开发环境(“工具”菜单),但找不到 ABL 查询测试器。我还检查了目录“C:\Progressx86\OpenEdge\bin”,但作为新手我什么也没找到。

我已经下载了“DataDigger”应用程序,其中包含一个所谓的“MCF Query Tester”,但这仅适用于单个表并且仅检查条件,而不是整个 ABL 查询。

有人知道我在哪里可以找到 ABL 查询测试器,首先用于语法检查(“WHERE”前面的括号)和(如果可能的话)用于数据测试(2021 年 1 月 12 日,是 1 月 12 日还是12 月 1 日?)?

提前致谢
多米尼克

【问题讨论】:

  • 而且由于没有人提到它,一旦您的查询编译,您将需要阅读如何选择和使用索引。您的查询虽然可能只是一个示例,但会导致全表扫描。
  • 您的标题显示“Progress Developer Studio for OpenEdge” - 这是基于 Eclipse 的开发环境(其中包含 AppBuilder 透视图),但您对 scatchpad 答案和您自己的答案的回答似乎表明您使用的不是 PDSOE,而是旧的 OpenEdge Studio。

标签: openedge progress-4gl


【解决方案1】:

在 Progress Developer Studio 中为 Openedge 创建一个新的 OpenEdge 项目。在具有必要数据库连接的项目下创建一个新的 ABL 过程。将上面的 ABL 代码复制到程序文件中,您应该可以在程序文件中看到错误和警告。

【讨论】:

    【解决方案2】:

    Progress Developer Studio 的 ABL Scratch Pad 视图允许执行临时查询。

    https://knowledgebase.progress.com/articles/Knowledge/000055088

    【讨论】:

    • 我该如何启动它?我启动了“C:\Progressx86\OpenEdge\bin\prowin32.exe”,这打开了完整版的程序编辑器,但它不包含“VIEW”菜单。
    • 最重要的是,URL 提到 Scratch Pad 可用于版本 11.2、11.3 和 11.4,而我正在使用 11.6。 (此 URL 是在 11.6 甚至存在之前编写的,或者 11.6 版本不再涵盖此功能。)
    • 当然。在 11.6 及更高版本中仍然存在。
    【解决方案3】:

    您没有提及您使用的是哪个编辑器,但总的来说,ABL COMPILE 语句执行语法检查。没有单独的/独立的可执行文件来编译/检查语法。通常您需要编写一个 .P 来执行编译。

    如果您想使用基于 Ant 或 Gradle 的构建系统,可以使用 PCTCompileAnt 任务。

    至于日期格式,我以为文档中有,但没有。硬编码时,日期始终具有MM/DD/YYYY 格式;小数在硬编码时始终使用 . 小数分隔符(即 123.45)。

    【讨论】:

      【解决方案4】:

      另一种测试您正在处理的查询的方法是使用接受字符串的 query-prepare。

      DEFINE QUERY q-Test FOR T1, T2. 
      QUERY q-test:HANDLE:QUERY-PREPARE("your query string here").
      

      【讨论】:

        【解决方案5】:

        我的一位同事向我展示了一个非常简单的解决方案:

        在单独的过程窗口中复制查询并添加您想要查看的结果,如下所示:

        FOR EACH T1 (WHERE T1.some-date = ' ')  AND 
                    (integer(T1.num1) >= 100) AND 
                    (integer(T1.num1) <= 200) AND 
                    (T1.some-other-date = 01/12/2021) AND 
                    (T2.Name = itsme), 
            EACH T2 WHERE T2.num2 = T1.num2 
            BY T1.num1
        
        /* To be added for viewing results */
        DISPLAY T1.Field1 T1.Field2 T2.Field5
        END.
        

        然后在编程环境中启动它 (F2)。
        如果出现语法错误,编译器会显示错误。如果语法正确,则会启动一个弹出窗口,显示结果。

        【讨论】:

        • 对奥斯汀的回答没有任何帮助 - 除非您的问题不正确。
        猜你喜欢
        • 2012-03-19
        • 2014-03-19
        • 2014-05-10
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 2017-02-28
        相关资源
        最近更新 更多