【问题标题】:Progress - Join Tables进度 - 连接表
【发布时间】:2015-01-07 10:36:09
【问题描述】:

我在向数据库记录之前添加了一些验证检查,我需要满足以下条件:

找到fieldinfo,其中fieldinfo.fieldno = 5052 找到codetable where codetable.tableno = fieldinfo.tableno and codetable.code = tt-employee.costcode

tt-employee 是一张临时表,其余直接来自db

由于我是新手,所以我有点困惑 - 应该为此使用连接,如果是的话,知道该怎么做吗?谢谢!

【问题讨论】:

  • 向我们提供您的架构
  • 嗯,架构很大,但基本上 fieldinfo 和 codetable 是数据库中的表,而 tt-employee 是一个临时表
  • Progress 4gl 不是 SQL -- 您确定要与此问题关联的 sql 标签吗?

标签: sql join progress-4gl openedge progress-db


【解决方案1】:

这里有一些事情需要考虑:

验证

您可以在逻辑中或在数据库本身中添加验证。如何做到这一点取决于您和系统的外观。如果数据库中已经存在验证,则可能需要将其保留在那里。

但如果这不是您的客户/老板等的要求,我会亲自将所有验证放在业务逻辑中而不是模式中。

如果您想使用数据库驱动的方法,请查看数据库手册中的“验证”。

加入

另一个问题是您的查询是错误的。 Progress 确实支持连接查询,但不支持 FIND-statement。

这样做是为了保留 FIND:

FIND fieldinfo NO-LOCK WHERE fieldinfo.fieldno = 5052 NO-ERROR.
IF AVAILABLE fieldinfo THEN DO:
  FIND FIRST codetable NO-LOCK WHERE codetable.tableno = fieldinfo.tableno 
                                 AND codetable.code    = tt-employee.costcode NO-ERROR.
  IF AVAILABLE codetable THEN DO:
    /* Do something */
  END.
END.

您也可以将其更改为带有连接的FOR-statement。

FOR EACH fieldinfo NO-LOCK WHERE fieldinfo.fieldno = 5052, 
  FIRST codetable NO-LOCK WHERE codetable.tableno = fieldinfo.tableno 
                           AND codetable.code    = tt-employee.costcode:
  /* Do something */
END.

【讨论】:

  • 完美,正是我需要的!你也帮我解决了我之前的问题,所以我非常感谢你!
  • “验证”是 4gl 特性之一,它“制作了一个很好的演示”,但几乎可以肯定它永远不会在实际代码中使用。它模糊了“业务逻辑”和“数据访问”之间的区别,从长远来看,这是一件令人头疼的事情。
  • @TomBascom 我完全同意,也许我应该在回复中说明这一点。没有太多的背景信息,有时验证已经存在于模式中(主要是在旧系统中),保留它可能是有益的。我将答案更改为更“验证触发否定”的立场。
  • NP,我只是确保没有人不小心认为验证是“最佳实践”。
【解决方案2】:

试试:

IF  expression  THEN   {block/statement}    [ELSE   {block/statement}]

IF  expression  THEN DO:   {block}   END.   [ELSE DO:   {block}   END.]

看看,如果有帮助的话。

【讨论】:

  • 干杯老兄,但我正在努力表达“codetable.tableno = fieldinfo.tableno”需要使用响应第一个条件的字段信息,然后来自那个需要匹配的代码表使用 tt-employee.costcode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2020-10-13
  • 2015-09-01
  • 2019-02-11
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多