pb8.0+ASA7.0的 C/S 模式的数据库应该怎么配置?

shuihersina 2003-11-25 11:32:10
请各位高手告诉我
pb8.0+ASA7.0的 C/S 模式的程序发布的时候要想顺利运行,应该怎样写注册表
——客户端和服务器端的注册表各应该怎样写?
(千万不要告诉我手动配置——手动配置我是会的)
先谢谢了!
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihersina 2003-11-26
  • 打赏
  • 举报
回复
楼上说的好像是单机版的本地数据源的注册,
我说的是 C/S 模式的网络数据库的注册呀!
麻烦你告诉我好么??
qqjj7758 2003-11-26
  • 打赏
  • 举报
回复
强烈建议用安装工具来设置注册表 那样更令灵活
qqjj7758 2003-11-26
  • 打赏
  • 举报
回复
这样的例子好多
动态往注册表里填写数据 很容易 一个ini文件就帮你搞定

二、使用PB的注册函数
  PB中使用“RegistrySet()”函数在注册表中设置或创建指定的键,以下是该函数语法及参数。
  语法:
  RegistrySet ( key, valuename, valuetype, value )
  参数:
  key:string类型,指定键名;
  valuename:string类型,指定要访问值的名称。每个键可以有一个未命名的值和多个命名的值。要访问未命名的值,把该参数指定为空字符串(″″)。如果注册库中不存在指定值名,该函数将创建新的值名;
  valuetype:RegistryValueType枚举类型,指定值的数据类型,这里我们选用“regstring!”;
  value:要设置的值,其数据类型应该与valuetype参数指定的类型相匹配。
  返回值:Integer型。函数执行成功时返回1,失败时返回-1。
  三、应用实例
  假设我们连接到“sybase sql anywhere 5.0”创建的本地数据库“c:\pb\ex.db”,数据源名称为“ex”。
  /*如果是第一次运行该系统,则注册数据源:为了保证应用程序只是在首次运行时注册数据源,需要在程序的工作目录下创建一个INI文件,该文件包含“start”小节, 其中建立“first=1”*/
  integer rc
  //取得INI文件中“start”小节 “first”的值
  rc=profileint(″first.ini″,″start″,″first″,1)
  //rc=1则是初次运行该系统,进行注册
  if rc=1 then
  /*将数据源名称“ex”注册到“HKEY_CURRENT_USER\software\odbc\odbc.ini\odbc data sources”下。*/
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\odbc data sources″,″ex″,regstring!,″sybase sql anywhere 5.0″)
  /*“HKEY_CURRENT_USER\software\odbc\odbc.ini”下新增以该数据源名称“ex”为键名的子键,*/
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″″,regstring!,″″)
  //创建连接到数据源所需要的参数
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″autostop″,regstring!,″yes″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″databasefile″,regstring!,″c:\pb\ex.db″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″databasename″,regstring!,″ex″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″driver″,regstring!,″wod50t.dll″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″pwd″,regstring!,″sql″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″start″,regstring!,″dbeng50 -Q″)
  registryset(″HKEY_CURRENT_USER\software\odbc\odbc.ini\ex″,″uid″,regstring!,″dba″)
  /*设置INI文件中“start”小节的“first=0”,避免下次运行时再次注册数据源*/
  setprofilestring(″first.ini″,″start″,″first″,″0″)
  end if
  将以上代码加入应用对象的open事件中,执行程序即可完成ODBC数据源的注册。
  代码中为了更好地说明registryset()函数的使用,将连接的数据库固定在“c:\pb”目录下。在具体应用中,可以使用外部函数“GetCurrentDirectoryA()”得到当前目录,与数据库文件名合并为一个字符串变量后,以该变量注册″databasefile″的值,就实现了真正的动态注册ODBC数据源,这里不再赘述。
mittee 2003-11-26
  • 打赏
  • 举报
回复

answer9=RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\YOU_DB_CLIENT","EngineName",RegString!,"YOUR_DB_SERVER")//这里指定你数据服务器的名字
answer10=RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\YOU_DB_CLIENT","CommLinks",RegString!,"TCPIP{}") //这里指定通过tcp/ip 连接 生成 dsn后看一下就知道了
answer11=RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\YOU_DB_CLIENT","AutoStop",RegString!,"YES")
pb8 2003-11-26
  • 打赏
  • 举报
回复
//服务器端
global type uf_runasaserver from function_object
end type

forward prototypes
global function integer uf_runasaserver (string as_runpath, string as_servername, string as_db, string as_log)
end prototypes

global function integer uf_runasaserver (string as_runpath, string as_servername, string as_db, string as_log);//运行服务器数据库
string ls_Server,ls_cmd
ls_server = as_runpath + "dbsrv7"
ls_cmd = ls_server + ' ' + as_db + ' -n ' + as_servername&
+ ' -x tcpip -c 44m -q -o ' + as_log
run(ls_cmd)
return 0
end function


//客户端
global type uf_regasaforserver from function_object
end type

forward prototypes
global function integer uf_regasaforserver (string as_odbc, string as_ip, string as_db, string as_user, string as_pass, string as_drive)
end prototypes

global function integer uf_regasaforserver (string as_odbc, string as_ip, string as_db, string as_user, string as_pass, string as_drive);String ls_odbckey,ls_host
int li_rtn

ls_odbckey = 'HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\' + as_odbc
ls_host = "TCPIP{host=" + as_ip + "},SharedMemory"
//数据库驱动程序
li_rtn = RegistrySet(ls_odbckey,"Driver", RegString!,as_drive)
if li_rtn = -1 then return -1
//用户名
li_rtn = RegistrySet(ls_odbckey,"UID", RegString!,as_user)
if li_rtn = -1 then return -1
//密码
li_rtn = RegistrySet(ls_odbckey,"PWD", RegString!,as_pass)
if li_rtn = -1 then return -1
//数据库名
li_rtn = RegistrySet(ls_odbckey,"DatabaseName", RegString!,as_db)
if li_rtn = -1 then return -1
//引擎名
li_rtn = RegistrySet(ls_odbckey,"EngineName", RegString!,as_db)
if li_rtn = -1 then return -1
//自动停止
li_rtn = RegistrySet(ls_odbckey,"AutoStop", RegString!,"YES")
if li_rtn = -1 then return -1

li_rtn = RegistrySet(ls_odbckey,"Integrated", RegString!,"NO")
if li_rtn = -1 then return -1
//网络连接
li_rtn = RegistrySet(ls_odbckey,"CommLinks", RegString!,ls_host)
if li_rtn = -1 then return -1

return 0
end function

shuihersina 2003-11-26
  • 打赏
  • 举报
回复
怎么没有人知道呀

1,093

社区成员

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

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