关于在子表中创建限制性记录。 (Oracle 表单生成器)

Posted

技术标签:

【中文标题】关于在子表中创建限制性记录。 (Oracle 表单生成器)【英文标题】:About restrictive record creation in a child table. (Oracle Forms Builder) 【发布时间】:2012-11-30 18:43:05 【问题描述】:

我创建了一个向子表添加记录的表单。但是我不希望人们能够编辑辅助键,只能从父主键列表中选择它或类似的东西。我怎么能这样做?

表格:

CREATE TABLE CHAMPIONS (CNAME VARCHAR2(15) NOT NULL, PRICELEVEL NUMBER(1) NOT NULL, ROLE VARCHAR2(10) NOT NULL, HPLEVEL NUMBER(2) NOT NULL, ATKLEVEL NUMBER(2) NOT NULL, MAGICLEVEL NUMBER(2) NOT NULL, DIFFLEVEL NUMBER(2) NOT NULL); 

CREATE TABLE SKINS (SNAME VARCHAR2(20) NOT NULL, CNAME VARCHAR2(15) NOT NULL, PRICELEVEL NUMBER(1) NOT NULL); 

ALTER TABLE Champions ADD CONSTRAINT pk_Champions PRIMARY KEY (CNAME);

ALTER TABLE Skins ADD CONSTRAINT fk_Skins FOREIGN KEY (CNAME) REFERENCES champions(CNAME);

【问题讨论】:

【参考方案1】:

信息太少,无法给出答案,但我可以试一试。

您可以在明细表中创建LOVs,并将LOV 从父表的主键中删除,也可以将要链接的文本项与您需要放置WHEN-VALIDATE-ITEM 的LOV使用与LOVs RECORD GROUP 中相同的查询触发,这样如果用户键入而不是使用LOV,您可以验证输入,然后在输入无效时提醒他们并获取正确的主主键如果输入的值正确。

下面是带有 LOV 按钮的数据块的样子-

下面是数据块中STORE项的触发器-

考虑到查询中的主表,您可以对 RG 进行与触发器中的查询类似的编码。

【讨论】:

我会尽可能地检查这个,但我可以为您提供您需要的所有信息。用更多信息更新了问题。如果您需要更多,请告诉我。【参考方案2】:

获得此功能的最简单方法是基于 Champions.cname 创建一个 LOV,并将其附加到项目表单列 skins.cname(如果您不熟悉创建 LOV:s,请参阅表单帮助)。然后将项目 skins.cname 的项目属性 'Validate from list' 设置为 Yes。这将根据现有的 cname 值验证所有输入的值。

【讨论】:

以上是关于关于在子表中创建限制性记录。 (Oracle 表单生成器)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle外键需要建索引吗?

如何在 Oracle Apex 中创建包含文件的列表

oracle查询包含在子表中的主表数据

在子表单访问中绑定组合框

在子表中没有记录的“周”之间查询多条记录

使“DoCmd.GoToRecord”函数在子窗体上工作