楼主: xilangxiangwa

[精华] 利用DDE技术实现ORACLE FORMS 6i 中打开文件(如:EXCEL、WORD、图片、网页)的功能

[复制链接]
论坛徽章:
0
51#
发表于 2012-9-28 12:57 | 只看该作者
xilangxiangwa 发表于 2008-1-25 11:14
为啥大家看了都不回贴啊,
有建议随便提啊.没事的

现在才看到这个帖子,我试了一下,为什么失败?

使用道具 举报

回复
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-12-03 01:03:272010世博会纪念徽章
日期:2010-09-14 17:24:312010新春纪念徽章
日期:2010-03-01 11:20:05生肖徽章2007版:马
日期:2009-11-13 10:55:15参与WIN7挑战赛纪念
日期:2009-11-06 10:44:24CTO参与奖
日期:2009-03-23 11:00:18生肖徽章2007版:马
日期:2009-02-08 17:20:54生肖徽章2007版:兔
日期:2008-12-01 13:33:59生肖徽章2007版:马
日期:2008-10-31 19:01:49奥运会纪念徽章:赛艇
日期:2008-10-24 13:25:17
52#
 楼主| 发表于 2012-10-9 21:05 | 只看该作者
yfmfeizhou 发表于 2012-4-6 10:07
一直打开文件失败啊,楼主是怎么运行的啊,我也加载了pll了,在同一目录下的,编译也没问题,没有一个能打开 ...

可以参照附件中的程序。
注意是CS的

使用道具 举报

回复
论坛徽章:
0
53#
发表于 2015-4-29 22:58 | 只看该作者
这个帖子很受欢迎,从08年讨论到15年。可惜没有成功打开的。若高手看到回帖,还请多多指导啊!
我的试验情况如下:
下载D2KWUTIL.PLL顺利,加载该附加程序库顺利,编译.fmb顺利,可运行就是调不出WORD。
试了一下:若注释掉读取注册表语句,直接给        v_application_path赋常量,即:
  --v_application_path:=Win_Api_Environment.Read_Registry('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\'||v_application,'Path');  
   v_application_path:='C:\Program Files\Microsoft Office\OFFICE11\';
则打开WORD成功。说明问题出在调用Win_Api_Environment.Read_Registry()子程序上,没有任何路径字符串返回,也无失败信息。
我有几处不明白,多谢高手给予指点啊:
1 这个调用子程序的语句是否写错了?查了包头的定义,似乎没错?
2 D2KWUTIL.PLL下载后为676kb,可加载后仅9kb,可打开包头,但打不开包体,是否包体没装好?否则为什么丢了这么多数据?
3 真的没有调用成功的吗?请介绍一下啊。谢谢 急盼。

使用道具 举报

回复
论坛徽章:
0
54#
发表于 2016-1-20 11:03 | 只看该作者
CHECK   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\  有無 "WORD.EXE" 的機碼及PATH內的值
同理 EXCEL 亦同

使用道具 举报

回复
论坛徽章:
0
55#
发表于 2016-1-20 11:08 | 只看该作者
D2KWUTIL.PLL需加载到附加程序库再编译
Win_Api_Environment.Read_Registry
就不會報錯了
/*过程参数说明:
v_application ——打开文件的应用程序
v_file_path   ——带详细路径的文件名
*/
PROCEDURE p_open_file(v_application VARCHAR2 , v_file_path VARCHAR2) IS
        v_app_id                                  PLS_INTEGER;
  v_application_path      VARCHAR2(200); --应用程路径
        v_end_char              VARCHAR2(1);
BEGIN
       
        --读注册表获取应用程序路径
        v_application_path := Win_Api_Environment.Read_Registry('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\'||v_application,'Path');  
       
        --为做到打开文件的统一性,对应用程序路径做相应处理
        v_end_char :=SUBSTR(v_application_path , LENGTH(v_application_path));       
        IF  v_end_char = ';' OR v_end_char = '\' THEN
                v_application_path := SUBSTR(v_application_path , 1 ,LENGTH(v_application_path)-1);
        END IF;       
       
        --打开文件
        --注意:dde.app_begin()函数的第一个参数格式为:应用程序路径 + 空格 + 文件名(含路径)
        --      由此为使文件名中含空格或桌面上的文件也能被打开,我们需给文件名加上双引号
        v_app_id :=dde.app_begin(v_application_path||'\'||v_application||' '||'"'||v_file_path||'"' ,dde.app_mode_maximized);
       
        --将光标定位到打开的文件中
        dde.app_focus(v_app_id);
EXCEPTION  WHEN OTHERS THEN
        MESSAGE

使用道具 举报

回复
论坛徽章:
0
56#
发表于 2017-6-30 12:01 | 只看该作者
开始试了,能编译但点按钮报错,后来找高手解决了,原来是D2kwutil.pll的版本不对,dp2000和dp6i的程序库是有区别的,要用508kb的那个,完美解决。话说现在用6i的真是快绝种了。

使用道具 举报

回复
论坛徽章:
0
57#
发表于 2017-7-13 15:03 | 只看该作者
UP!UPUP表示感谢

使用道具 举报

回复
论坛徽章:
0
58#
发表于 2017-7-13 15:58 | 只看该作者
suyimeng910 发表于 2017-6-30 12:01
开始试了,能编译但点按钮报错,后来找高手解决了,原来是D2kwutil.pll的版本不对,dp2000和dp6i的程序库是 ...

兄弟 我刚入行 你说的我有点 理解不了!能帮忙具体解释一下么!小弟在此谢过!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表