如何动态创建数据源(ODBC)-------???/

81739649 2001-11-28 07:52:15
...全文
94 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesni 2001-12-05
  • 打赏
  • 举报
回复
下面以Powerbuilder内置的Sybase SQL Anywhere5.0数据库为例介绍ODBC的代码配置方法。
1、 找出数据库驱动程序及相关文件
首先找到相应的数据库驱动程序,这些文件可以在注册表的HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI下相应键中找到。如Sybase SQL Anywhere5.0为dbeng50.EXE,WOD50T.DLL,以及一些其他相关的动态链接库,此例中为Dbl50t.dll,Wl50ent.dll,Wtr50t.dll,Wodbc.gid,Wtr50t.dll。这些文件必须与最终的可执行程序一起安装到用户的计算机上,可以与应用程序放在一起,也可以放在一个特定的目录下(本例为Windows的system目录下)。在调试时可先将这些文件复制到指定的目录下。
2、 在程序中用代码配置ODBC
在应用的open事件中对ODBC配置的代码如下:
Ulong ul_num
Int answer,answer1,answer2,answer3,answer4,answer5,ansapp
String ls_driver,ls_start,ls_location,apppath,db_path,odbcstr
//获取操作系统的system目录,并保存到ls_location变量
answer=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup”,”SysDir”,RegString!ls_location)
IF answer=-1 THEN
Messagebox(‘错误’,’应用程序无法获取Windows的系统目录,系统统将终止运行!’,Stopsign!)
RETURN
END IF
//判断Sybase SQL Anywhere5.0的驱动程序是否正确安装
ls_driver=ls_location+’\WOD50T.DLL’
ls_start=ls_location+’\dbeng50.EXE’
IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THEN
Messagebox(‘错误’,’系统中没有安装SQL Anywhere的驱动程序,系统将终止运行!’,StopSign!)
RETURN
END IF
//设置ODBC\ODBCINST.INI\ODBC DRIVERS
answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER’,’Sybase SQL Anywhere 5.0’,RegString!,’Installed’)
IF answer=-1 THEN
Messagebox(‘错误’,’应用程序无法设置ODBC DRIVERS,系统将终止运行!’,StopSign!)
RETURN
END IF
//设置ODBC\ODBCINST.INIanswer1=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’CPTimeout’,RegString!,’not pooled’)
answer2=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Driver’,RegString!,ls_driver)
answer3=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Setup’,RegString!,ls_driver)
IF answer1=-1 OR answer2=-1 OR answer3=-1 THEN
Messagebox(‘错误’,’应用程序无法设置ODBCINST.INI,系统将终止运行!’,StopSign!)
RETURN
END IF
//设置ODBC DATA SOURCE名称(anysql为数据源名)
answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources’,’anysql’,RegString!,’Sybase SQL Anywhere 5.0’)
IF answer=-1 THEN
Messagebox(‘错误’,’应用程序无法设置ODBC DATA SOURCE名称,系统将终止运行!’,StopSign!)
RETURN
END IF
//获取应用程序的安装路径(ybinput为应用程序安装到用户计算机上后在注册表中注册的应用程序名,yibiao.db为应用程序的数据库名,与应用程序在同一目录下,anysql为数据源名)
ansapp=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\ybinput”,”Path”,RegString!app_path)
IF ansapp=-1 THEN
Messagebox(‘错误’,’应用程序无法获取安装路径名,系统将终止运行!’,StopSign!)
RETURN
ELSE
db_path=app_path+’yibiao.db’
END IF
//设置ODBC.INI的细节
answer1=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’driver’,RegString!,ls_driver)
answer2=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’start’,RegString!,ls_start)
answer3=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’autostop’,RegString!,’yes’)
answer4=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseFile’,RegString!,db_path)
answer5=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseName’,RegString!,’yibiao’)
IF answer1=-1 OR answer2=-1 OR answer3=-1 OR answer4=-1 OR answer5=-1 THEN
Messagebox(‘错误’,’应用程序无法设置ODBC.INI细节,系统将终止运行!’,StopSign!)
RETURN
END IF
odbcstr=’dsn=anysql;databasename=yibiao;databasefile=’+db_path
sqlca.dbms=’odbc’
sqlca.databse=’yibiao’
sqlca.dbparm=”connectstring=’”+odbcstr+”;uid=dba;pwd=sql’”
connect using sqlca;
open(w_main)
coffeedou 2001-11-30
  • 打赏
  • 举报
回复
建数据源就是修改注册表
daizhihui_1 2001-11-30
  • 打赏
  • 举报
回复
这段代码写在需要这个数据源之前,具体意思看一下注册表
81739649 2001-11-29
  • 打赏
  • 举报
回复
就这么短呀。我见以前的贴说得好长呀。
还要加点什么东西吗?
还有这段代码写在什么地方??
还可以作些解说吗?
谢谢!!1
daizhihui_1 2001-11-29
  • 打赏
  • 举报
回复
string ls_key,ls_name,ls_value
ls_key = "hkey_current_user\software\odbc\odbc.ini\odbc data sources"
ls_name = "db_tzgl"
ls_value = "IBM DB2 ODBC DRIVER" //DB2
registryset(ls_key,ls_name,segstring!,reg_value)

registryset("hkey_current_user\software\odbc\odbc.ini\db_tzgl","",segstring!,"")
ls_key = "hkey_current_user\software\odbc\odbc.ini\db_tzgl"

ls_name = "database"
ls_value = "DB_TZGL"
registryset(ls_key,ls_name,regstring!,ls_value)

ls_name = "driver"
ls_value = "F:\Program Files\SQLLIB\BIN\DB2CLI.DLL"
registryset(ls_key,ls_name,regstring!,ls_value)
...
东土 2001-11-28
  • 打赏
  • 举报
回复
O
看看!
关注中!
lesni 2001-11-28
  • 打赏
  • 举报
回复
查查以前的帖子,很多的。

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧