Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2625008
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2009-03-25 13:43:39

转载一篇不错的文章,我们平时在获取form数据源的时候可能只用到了其中的某种方法,而笔者把所有的方法都做了总结,值得参考。

当或者用户们指着上的某个栏位的大声喊道:“对,我就要它,报表上给我带出来”,人员常常会面露难色,“抱歉,这个字段我取不到”。

真得取不到吗?

为什么取不到?

 

      

取不到数据,大概有以下几个原因:

1找不到Block对应的

2能找到Block对应的数据源,但是不知道界面上的Item对应基表的哪个字段

3 Item是非字段(比如是汇总字段,公式字段或是同步字段等)

4想通过下载当前Form的源代码寻找数据源,却不知道对应哪个fmb文件

5 ….

数据源
对应的fmb文件

查看当前Form对应的fmb源文件,我知道的至少有2种方法:1 Help—About Application2巧用Form.个性化功能,找到对应的fmb文件名后只要到服务器目录将对应的文件下到本地即可

1Help—About Oracle Application

1

2

在图1红圈所示部分,可以得到看到编译完成.fmx文件名和存放路径,一般.fmb文件和fmx文件同名。

比较图1和图2紫圈部分,可以在Form级的WHEN-NEW-FORM-INSTANCE触发器中添加源文件注释,Oracle标准Form就是这么做的。

2.巧用Form.个性化功能

前提是已Form个性化菜单开启,从当前Form打开Form个性化界面,可以看到当前Form对应的Function NameForm. Name,就这么简单

 

3

 

查看Block的数据源的方法就更多了,1Help—Record History2 System.Last_Query 3查看fmb文件

1Help—Record History

此方法的前提是Block中包含5Standard Who Collums,但这并不是充分条件。

4

2Help—Diagnostics—Examine System.Last Query

5

在当前Block中执行F11查询操作,然后查看System.Last_Query的值,可以得到最后一个执行查询的语句,往往可以获得我们想要的数据源。需要注意的是,如果Form存在主从块级联自动查询或者post_query执行其他查询的情况,那么在主块F11查询后查看System.Last_Query,那么得到就不是主块的数据源了,这种方法需根据情况,灵活使用

3.查看fmb文件

这种办法比较麻烦,但是却最直接最准确,前提是先得到当前Form对应的源文件。另外在当前Form上数据块极多的情况下,一个小是利用块上字段先得到目标块的名称,然后直接在Form. Bulider中找到该块,查看Query Data Source Name属性:

6

查看Item的数据源的情况相对比较复杂,相对比较难找。有些Item基于表字段,有些基于视图字段,还有的甚至是非数据库字段(汇总字段,同步字段,公式字段,post_query赋值等)

1Help—Diagnostics—Examine +联想

此方法很简单,查到Filed Name后,只要Select FieldName from QueryDataSourceName即可,如图7只要select ship_to_address1 from oe_order_headers_v

 

7

2.查看fmb文件+联想

当上例中的fieldFieldName与其对应的数据库字段名不一致或者根本就不是数据库字段的情况下,方法1就不再适用了,此时打开fmb源文件,查看Item属性是最好的方法。一个小技巧是利用方法1Examine功能先得到BlockNameFieldName,便于快速定位

 

8

如图8,在Item属性窗体中留意下Collum NameCopy Value from ItemSynchronize with Item等属性,也许就能当前Block中执行F11查询操作,然后查看System.Last_Query的值,可以得得到你想要得答案了

3Help—Diagnostics— Trace

如果查看Item属性仍无果,我一般把Sql Trace作为最后一招,它能将记录在起始时间点之间当前Form与数据库后台的所有交互操作与过程,里面包含了包括等待,绑定变量,查询语句等大量,查看比较费劲,不过可以利用Tkprof命令将trace文件转换成易于阅读的格式。

Tkprof命令是Oracle端的一个可执行文件,一般在8.0.6\BIN目录下可以找到;TKPROF的命令行格式是:Tkprof tricefile outputfile [Sys=] [Explain=] [Sort=] [Table=] [Print=] [Insert=]

示例:

Tkprof c:\devp2_ora_19657_8NICO.trc C:\196570.prf

Tkprof c:\devp2_ora_19657_8NICO.trc C:\196571.prf Sys=no

Tkprof c:\devp2_ora_19657_8NICO.trc C:\196572.prf Sys=no Explain=APPS/WDBSVRAPP

 

9

如图9要查询得到界面上的total字段,利用方法2却一无所获

 

那么按图9所示启用Trace,使用F11查询得到数据后终止Trace

11

根据系统提示将.trc文件下载到本地,利用Tkprof优化格式后,可以在其中发现下面的语句:

12

虽然没有直接得到答案,但借此我们可以推断出数据可能来源于汇总字段,点开图9界面Details按钮,如图13

13

根据方法1和方法2,以及图12的提示,就可以得到Total字段的取值方法了,过程略。

 

 

            以上方法都是日常工作经验的总结,查找数据 源更多的要依靠经验的积累。以上的方法可以根据实际情况,组合使用,效果更佳。

阅读(4803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~