如何使用 Oracle 表单(中间件)11gR2 从 Oracle 表填充文本项

问题描述 投票:0回答:2

我使用 Oracle 和 Oracle Forms 构建器(中间件)均为 11gR2。我正在创建一个采购记录系统。我有以下2张桌子。

(a) product (master) : prodid(PK), prodname ...... etc.
(b) purchase (detail) : prodid(FK), quantity, ...... etc.

我的计划:所有产品详细信息都将在产品表中。购买表仅用于输入购买信息。该表不能输入任何新产品。如果有任何新名称,则必须首先将该信息输入到产品表中。这样我可以减少重复的名称。 现在我在表格中的 prodname(产品名称)列方面遇到困难。

我仅使用购买表创建表单。该表没有 prodname (因为我将此字段放在产品表中)列。但在数据输入时,他们需要看到产品名称! 所以我创建了文本项(表格,数据库 - 否)。然后我创建了 LOV,附加到文本项,在表单的 prodid 字段中输入 prodid。 LOV部分很好。

我运行表格。单击文本项,出现 LOV,选择名称,单击确定。产品名称、产品 ID 等按其应有的方式出现在其字段中。 LOV 运行良好。现在我只能输入数据但更新有困难。我的意思是,如果我在文本项中输入名称(LOV),按执行查询,显示数据库中的记录,但文本项中的名称消失。由于名字不在这里,所以不方便更新。

我认为 LOV 在这里不是个好主意。可能我需要在某个地方的触发器中使用 PL/SQL。 但我无法弄清楚。我搜索了谷歌但没有运气。有谁可以给我任何想法或一些示例代码/触发器吗?

database oracle plsql triggers
2个回答
0
投票

由于产品名称是非数据库项,因此当执行查询运行时,该字段将被清除,并且由于没有为该字段分配列,因此不会重新填充。

填充此字段的常用方法是使用一个函数,该函数根据按下的 id 返回产品名称,并在 POST-QUERY 触发器中调用该函数。


0
投票

基本上这是一个非常简单的任务,但由于缺乏经验,我遇到了困难。然而,我所做的是-

  1. 在画布中创建文本项(名称:product_name)
  2. 设置产品名称的属性(数据库:否,...等根据需要)。
  3. 创建块级 POST-QUERY 触发器并编写 PL/SQL 块来填充字段。例如,我写了以下内容。

开始 SELECT 产品名称 INTO :purchase.product_name 来自产品,其中 Product.prodid = :purchase.prodid ; 结束;

  1. 就是这样,当在表单中执行execute_query时,它将从另一个表中获取产品名称。 - 查询问题已解决。

  2. 现在使用产品表创建一个 LOV,其中包含产品名称和产品 id。

  3. 将此 LOV 关联到 Product_name 文本项。因此,每当您需要输入有关购买的信息时,只需使用 LOV 填充产品名称字段即可。然后输入后续字段。

这样我的两个问题(查询和数据输入)都得到了解决。 我根据 Sathya 给出的建议和 YouTube https://www.youtube.com/watch?v=0nqldnGt8KA.

的视频(6 分钟)进行了此操作。

感谢 Sathya 和 youtube。

© www.soinside.com 2019 - 2024. All rights reserved.