OpenEdge - DataSet定义中的多个RELATION-FIELDS

时间:2013-07-11 14:07:01

标签: progress-4gl openedge

使用Openedge版本11.2& Progress Developer Studio。

我使用多个TEMP-TABLE定义(每个定义在一个单独的包含文件中)来形成DataSet。如果我只使用一对RELATION-FIELDS来获得单个数据关系,那么一切看起来都不错。只要我在定义中添加另一个RELATION-FIELDS对并在表单上删除包含文件(或通过"从文件&#34导入模式;按钮)导入模式,DataSet就会显示一个没有列的重复子表。为简单起见和测试,我设置了三个测试文件:

tt1.i - 第一个TEMP-TABLE:

/* Temp Table 1 */
DEFINE TEMP-TABLE tt1
  FIELD tt_test AS CHARACTER
  FIELD tt_rel_field_1 AS INTEGER
  FIELD tt_rel_field_2 AS INTEGER
  INDEX tt_idx tt_rel_field_1 tt_rel_field_2.

tt2.i - 第二个TEMP-TABLE:

/* Temp Table 2 */

DEFINE TEMP-TABLE tt2
  FIELD tt_test2 AS CHARACTER
  FIELD tt_rel_field_1 AS INTEGER
  FIELD tt_rel_field_2 AS INTEGER
  INDEX tt_idx tt_rel_field_1 tt_rel_field_2.

dsTest.i - 数据集定义:

/* Dataset Definition */

{tt1.i}
{tt2.i}

DEFINE DATASET dsTest FOR tt1 , tt2
  DATA-RELATION drTest FOR tt1 , tt2
  RELATION-FIELDS (
  tt_rel_field_1,tt_rel_field_1,
  tt_rel_field_2,tt_rel_field_2
).

当我在表单上删除dsTest.i时会发生什么情况的打印屏幕:

Two child tables

如果我删除第二对,一切正常 - GUI明智。我错过了一些明显的东西吗?到目前为止,我发现的所有示例都使用单个RELATION-PAIR。现在我想知道为什么。根据Progress Knowledgebase的文章000018088,没有涉及伏都教。

1 个答案:

答案 0 :(得分:2)

根据手册,您的语法看起来是正确的。但有趣的是,我在整个环境中看不到任何地方,我们使用超过1个关系字段。可能是它想为您定义的每个字段创建一个关系。

您在表格中放置的数据是什么样的?数据必须形成唯一匹配。

我会问Tom Bascom对此的一些意见。 https://stackoverflow.com/users/123238/tom-bascom

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

OpenEdge开发的第1-19页:ProDataSets手册执行以下操作:

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).   

很抱歉不确定如何在这里进行格式化,但也许可以通过创建另一个表作为两者之间的链接进行测试?