如何读注册表中的数据?急!
我想知道oracle安装的目录,用RegistryGet函数,代码如下
RegistryGet("HEKY_LOCAL_MACHINE\SOFTWARE\ORACLE","ORACLE_HOME",RegString!,ls_return)
return ls_return
但是程序却没有反映。请各位高手看看有什么错误。谢谢!
问题点数:20、回复次数:9Top
1 楼eastpond(东塘)回复于 2003-09-04 21:11:43 得分 0
看看registryGet的返回值,
调试下程序,看ls_return 得到什么内容Top
2 楼gloryict(朋友)回复于 2003-09-04 21:19:06 得分 0
好像什么都没有得到,
sle_1.text = ls_return
但sle_1里面什么都没有现实
顺便问一句,我想输出ls_return,应该怎么做?Top
3 楼gloryict(朋友)回复于 2003-09-04 21:52:33 得分 0
对注册表数据没有成功,不知道为什么?
高手帮帮忙,谢谢!Top
4 楼thelazyman(卧虎藏龙)回复于 2003-09-04 22:15:06 得分 0
你先查看注册表中是否有此值!!
执行函数
if RegistryGet("HEKY_LOCAL_MACHINE\SOFTWARE\ORACLE","ORACLE_HOME",RegString!,ls_return)=1 then
if ls_return<>'' then
messagebox('提示','获得注册表的值为:'+ls_return)
end if
else
messgebox('提示','函数registryget()执行失败!')
end if
Top
5 楼gloryict(朋友)回复于 2003-09-04 22:19:27 得分 0
我试过了,执行失败!
不知道为什么?Top
6 楼eltoro(一天到晚游泳的鱼)回复于 2003-09-04 22:23:03 得分 10
以下一篇文章,希望能对楼主有帮助:
/*****************************************************************
行需要
手工设置ODBC。本文介绍一种代码配置的方法可以免去在进行单机或网络数据库应用程序时进行手工配置ODBC的烦琐。PowerBuilder是功能
强大的客户端开发工具,它的优势在于数据库应用程序的开发,所以绝大部分应用必须与数据库管理系统配合起来才能运行。OBDC是一种编
程接口,它能使应用程序访问以结构化查询语言(SQL)作为数据访问标准的数据库管理系统。PB与数据库的连接可以通过ODBC接口实现,在
ODBC中配置好数据源后,便可在程序代码中连接数据库并对数据库进行各种操作了。配置ODBC的方法主要有三种:手工配置、代码自动配置
和通过安装程序(如InstallShield等专业安装程序)自动配置。大部分PB资料对手工配置ODBC均作了介绍,在这里主要介绍在代码中进行
ODBC的配置的方法。第三种方法可以参考InstallShield等软件的使用说明。
原 理
Windows中所有的ODBC数据源在系统注册表中都有记载,因此只要编写相应的代码对注册表中的项目进行相应的修改即可。Windows中与
ODBC相关的键,主要有下面几项:
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER 记录所有已安装的ODBC驱动程序;
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI 记录各种ODBC驱动程序的相关信息;
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources 记录各种数据源的类型;
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI 记录各种数据源的详细信息。
只要打开Windows 95(Windows 98、Windows NT4或Windows 2000)菜单“开始”,然后单击“运行”,输入Regedit运行注册表程序,
在注册表中选择左边的树结构,查找上述相应的选项,就可以看到其中的详细信息。
我们只要在代码中对这些键进行配置,便可达到配置ODBC的目的。
实 现
下面以PowerBuilder 7.0 内置的Sybase SQL Anywhere 6.0数据库为例介绍ODBC的代码配置方法。
1、打开注册表,找到数据库驱动程序及相关文件
首先找到相应的数据库驱动程序,这些文件可以在注册表的HKEY_LOCAL_MACHINE\Software
\ODBC\ODBCINST.INI下相应键中找到。如Sybase SQL Anywhere 6.0为dbeng60.exe,Wod60t.dll,以及一些其他相关的动态链接库,此
例中为Dbl60t.dll、Wl60ent.dll、Wtr60t.dll、Wodbc.gid和Wtr60t.dll。这些文件必须与最终的可执行程序一起安装到用户的计算机上。
它们可以与应用程序放在一起,也可以放在一个特定的目录下(本例为Windows 98的System目录下)。在调试时可先将这些文件复制到指定
的目录下。
2、在应用程序中用PB脚本代码配置ODBC
在应用的Open事件中对ODBC配置的脚本代码如下:
Ulong ul_num;
Int li_sysdir,li_dir1,li_dir2,li_dir3,li_dir4,li_dir5,li_app;
String ls_driver,ls_start,ls_location,ls_apppath,ls_dbpath,ls_odbcstr;
//获取操作系统的system目录,并保存到ls_location变量
li_sysdir = RegistryGet(″KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup″,″SysDir″,RegString!ls_location);
IF li_sysdir = -1 THEN
Messagebox(′错误′,′应用程序无法获取Windows的系统目录,系统将终止运行!′,Stopsign!);
RETURN;
END IF
//判断Sybase SQL Anywhere6.0的驱动程序是否正确安装
ls_driver = ls_location+′\WOD60T.DLL′
ls_start = ls_location+′\dbeng60.EXE′
IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THEN
Messagebox(′错误′,′系统中没有安装SQL Anywhere 6.0的驱动程序,系统将终止运行!′,StopSign!);
RETURN;
END IF
//设置ODBC\ODBCINST.INI\ODBC DRIVERS
li_sysdir=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER′,′Sybase SQL Anywhere 6.0′,RegString!,′Installed′);
IF li_sysdir = -1 THEN
Messagebox(′错误′,′应用程序无法设置ODBC DRIVERS,系统将终止运行!′,StopSign!);
RETURN;
END IF
//设置ODBC\ODBCINST.INI
li_dir1=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′CPTimeout′,RegString!,′not pooled′)
li_dir2=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′Driver′,RegString!,ls_driver)
li_dir3=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′Setup′,RegString!,ls_driver)
IF li_dir1=-1 OR li_dir2=-1 OR li_dir3=-1 THEN
Messagebox(′错误′,′应用程序无法设置ODBCINST.INI,系统将终止运行!′,StopSign!);
RETURN;
END IF
//设置ODBC DATA SOURCE(MyDataSource为数据源名)
li_sysdir=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources′,′MyDataSource′,RegString!,′Sybase SQL Anywhere 6.0′);
IF li_sysdir=-1 THEN
Messagebox(′错误′,′应用程序无法设置ODBC DATA SOURCE,系统将终止运行!′,StopSign!);
RETURN;
END IF
//获取应用程序的安装路径(MyApp为应用程序安装到用户计算机上后在注册表中注册的应用程序名,MyDatabase.db为应用程序的数据库名,与应用程序在同一目录下,MyDataSource为数据源名)
li_app=RegistryGet(″KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\MyApp″,″Path″,RegString!ls_apppath)
IF li_app=-1 THEN
Messagebox(′错误′,′应用程序无法获取程序安装路径名,系统将终止运行!′,StopSign!);
RETURN
ELSE
ls_dbpath=ls_apppath+′MyDatabase.db′;
END IF
//设置ODBC.INI
li_dir1=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′driver′,RegString!,ls_driver);
li_dir2=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′start′,RegString!,ls_start);
li_dir3=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′autostop′,RegString!,′yes′);
li_dir4=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′DataBaseFile′,RegString!,ls_db_path);
li_dir5=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′DataBaseName′,RegString!,′MyDatabase′);
IF li_dir1=-1 OR li_dir2=-1 OR li_dir3=-1 OR li_dir4=-1 OR li_dir5=-1 THEN
Messagebox(′错误′,′应用程序无法设置ODBC.INI,系统将终止运行!′,StopSign!);
RETURN
END IF
ls_odbcstr=′dsn=MyDataSource;databasename=MyDatabase;databasefile=′+ls_dbpath;
sqlca.dbms=′odbc′;
sqlca.databse=′MyDatabase′;
sqlca.dbparm=″connectstring=′ ″+ls_odbcstr+″;uid=dba;pwd=sql′ ″;
connect using sqlca;
open(w_frame);
Top
7 楼klbt(快乐白兔)回复于 2003-09-04 23:55:44 得分 10
看一看你的大小写,比如“SOFTWARE”
Top
8 楼gloryict(朋友)回复于 2003-09-05 09:03:39 得分 0
谢谢各位大哥,可能就是大小写的问题吧
我换成Software就可以了。Top
9 楼runsoft(清风)回复于 2003-09-05 20:38:25 得分 0
恭喜,恭喜Top



