pb发布后还要连接数据库
我用powerbuilder做了个学生成绩管理系统,用creatinstall2003发布后,还弹出连接数据库,问题出在哪里了,怎么解决啊?急用!大家帮帮我吧!在线等着。...
我用powerbuilder做了个学生成绩管理系统,用creatinstall2003发布后,还弹出连接数据库,问题出在哪里了,怎么解决啊?急用!大家帮帮我吧!在线等着。
我的是个单机版的,用的是一个ASA DATABASE 的数据库,创建的是adaptive server anywhere 的数据源,就是发布后,仍要连数据库,正常的是发布后,就可以安装,独立使用了,可我的不行,拿到另一个机器上,就连不上数据库了。是不是少什么文件啊。多谢你的帮忙,再给解释一下吧!高手。 展开
我的是个单机版的,用的是一个ASA DATABASE 的数据库,创建的是adaptive server anywhere 的数据源,就是发布后,仍要连数据库,正常的是发布后,就可以安装,独立使用了,可我的不行,拿到另一个机器上,就连不上数据库了。是不是少什么文件啊。多谢你的帮忙,再给解释一下吧!高手。 展开
1个回答
展开全部
你的这个应用是基于哪种数据库呢?
是单机版的(如SQLAnywhere)还是网络版的(例如局域网里的SQLServer、Sybase数据库服务器)?
这两种我都做过一些,包括基于Sybase的网络版的档案管理、基于SQLAnywhere的一些毕业设计,而且主程序都是用PB开发的,你需要详细说明你的情况。
如果是基于SQLAnywhere的,并且在本机可以用、打包后连不了数据库、或在其他机器安装后无法连接数据库的问题,我最初也遇到过,解决的办法是:
在主应用里(程序的入口处)写一些代码,主要用来:
1、获取数据库的路径,并指定连接它
2、在注册表里插入新键,用于设置数据库的连接参数(程序安装后初次使用时创建)
说起来挺简单,但做起来比较麻烦
因为不知道你的具体情况,就没有必要详细说了。
----------------------------------------------------------------------
修改答复如下:
找了一个以前的应用,是给一个学生写的“小区监控系统”(早期编写的,PB版本是6.5、数据库是SQLAnywhere5.5)
以下的部分,是程序入口处(主应用main.pbl的open()事件)的一段代码,就是用来指定连接数据库的:
string currentdir //定义变量,用于取得程序所在的路径
currentdir=Space(256)
GetCurrentDirectoryA(256,currentdir) //系统函数,准备取路径
string s_value_drive,s_value_start
s_value_drive=currentdir+"\anywhere\wod50t.dll"
s_value_start=currentdir+"\anywhere\dbeng50.exe"
string ls_ODBC1="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"
RegistrySet(ls_ODBC1,'MONITOR','Sybase SQL Anywhere 5.0')
string ls_ODBC2="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MONITOR"
RegistrySet(ls_ODBC2,'AutoStop','yes')
RegistrySet(ls_ODBC2,'DatabaseFile',currentdir+'\MONITOR.DB')
RegistrySet(ls_ODBC2,'DatabaseName','MONITOR')
RegistrySet(ls_ODBC2,'Driver',s_value_drive)
RegistrySet(ls_ODBC2,'PWD','sql')
RegistrySet(ls_ODBC2,'Start',s_value_start)
RegistrySet(ls_ODBC2,'UID','dba')
SQLCA.DBMS = profilestring("MONITOR.ini","database","DBMS","")
SQLCA.DBParm = profilestring("MONITOR.ini","database","dbparm","")
SQLCA.AutoCommit = false
connect using sqlca;
if sqlca.sqlcode<>0 then
messagebox('','数据库连接失败,请检查相关设置')
else
open(w_main)
open(w_login)
end if
----------------------------------------------------------------------
另外,代码里涉及的MONITOR.ini,是我程序目录里的一个INI配置文件,它的内容是:
[DATABASE]
DBMS=ODBC
dbparm=Connectstring='DSN=MONITOR'
是单机版的(如SQLAnywhere)还是网络版的(例如局域网里的SQLServer、Sybase数据库服务器)?
这两种我都做过一些,包括基于Sybase的网络版的档案管理、基于SQLAnywhere的一些毕业设计,而且主程序都是用PB开发的,你需要详细说明你的情况。
如果是基于SQLAnywhere的,并且在本机可以用、打包后连不了数据库、或在其他机器安装后无法连接数据库的问题,我最初也遇到过,解决的办法是:
在主应用里(程序的入口处)写一些代码,主要用来:
1、获取数据库的路径,并指定连接它
2、在注册表里插入新键,用于设置数据库的连接参数(程序安装后初次使用时创建)
说起来挺简单,但做起来比较麻烦
因为不知道你的具体情况,就没有必要详细说了。
----------------------------------------------------------------------
修改答复如下:
找了一个以前的应用,是给一个学生写的“小区监控系统”(早期编写的,PB版本是6.5、数据库是SQLAnywhere5.5)
以下的部分,是程序入口处(主应用main.pbl的open()事件)的一段代码,就是用来指定连接数据库的:
string currentdir //定义变量,用于取得程序所在的路径
currentdir=Space(256)
GetCurrentDirectoryA(256,currentdir) //系统函数,准备取路径
string s_value_drive,s_value_start
s_value_drive=currentdir+"\anywhere\wod50t.dll"
s_value_start=currentdir+"\anywhere\dbeng50.exe"
string ls_ODBC1="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"
RegistrySet(ls_ODBC1,'MONITOR','Sybase SQL Anywhere 5.0')
string ls_ODBC2="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MONITOR"
RegistrySet(ls_ODBC2,'AutoStop','yes')
RegistrySet(ls_ODBC2,'DatabaseFile',currentdir+'\MONITOR.DB')
RegistrySet(ls_ODBC2,'DatabaseName','MONITOR')
RegistrySet(ls_ODBC2,'Driver',s_value_drive)
RegistrySet(ls_ODBC2,'PWD','sql')
RegistrySet(ls_ODBC2,'Start',s_value_start)
RegistrySet(ls_ODBC2,'UID','dba')
SQLCA.DBMS = profilestring("MONITOR.ini","database","DBMS","")
SQLCA.DBParm = profilestring("MONITOR.ini","database","dbparm","")
SQLCA.AutoCommit = false
connect using sqlca;
if sqlca.sqlcode<>0 then
messagebox('','数据库连接失败,请检查相关设置')
else
open(w_main)
open(w_login)
end if
----------------------------------------------------------------------
另外,代码里涉及的MONITOR.ini,是我程序目录里的一个INI配置文件,它的内容是:
[DATABASE]
DBMS=ODBC
dbparm=Connectstring='DSN=MONITOR'
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询