自动配置ODBC连接Anywhere 8.0总是有问题!

霖湘凝 2005-01-16 04:54:30

我想在程序中自动配置ODBC连接Anywhere 8.0,可总是有问题!

其实前面有一会儿是可以的,可是现在就根本连不上了,
只要一运行程序就弹出“ODBC Configuration for Adaptive.....”要求我配置相关信息,
我点了确定,只要之后有数据窗口刷新,就说:
“Database transaction information not available.
Call SetTrans or SetTransObject function”
数据库根本就没连上,大家帮我看看啊,是哪儿有问题啊?谢谢啊~
代码如下:
Ulong ul_num
Int answer,answer1,answer2,answer3,answer4,answer5,ansapp
String ls_driver,ls_start,ls_location,apppath,db_path,odbcstr
ls_location=GetCurrentDirectory()
ls_driver=ls_location+'\配置\dbodbc8.dll'
ls_start=ls_location+'\配置\dbodbc8.dll'
IF NOT (FileExists(ls_driver) AND FileExists(ls_start))THEN
Messagebox('错误','系统中没有安装SQLAnywhere的驱动程序,系统将终止运行!',StopSign!)
RETURN
END IF
answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER','Adaptive Server Anywhere 8.0',RegString!,'Installed')
IF answer=-1 THEN
Messagebox('错误','应用程序无法设置ODBCDRIVERS,系统将终止运行!',StopSign!)
RETURN
END IF
answer1=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','CPTimeout',RegString!,'notpooled')
answer2=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Driver',RegString!,ls_driver)
answer3=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Setup',RegString!,ls_driver)
IF answer1=-1 OR answer2=-1 OR answer3=-1 THEN
Messagebox('错误','应用程序无法设置ODBCINST.INI,系统将终止运行!',StopSign!)
RETURN
END IF
answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDataSources','handan',RegString!,'Adaptive Server Anywhere 8.0')
IF answer=-1 THEN
Messagebox('错误','应用程序无法设置ODBCDATASOURCE名称,系统将终止运行!',StopSign!)
RETURN
END IF
db_path=ls_location+'\数据\handan.db'
answer1=RegistrySet('HKEY_current_user\software\odbc\odbc.ini\handan','driver',RegString!,ls_driver)
answer2=RegistrySet('HKEY_current_user\software\odbc\odbc.ini\handan','start',RegString!,ls_start)
answer3=RegistrySet('HKEY_current_user\software\odbc\odbc.ini\handan','autostop',RegString!,'yes')
answer4=RegistrySet('HKEY_current_user\software\odbc\odbc.ini\handan','DataBaseFile',RegString!,db_path)
answer5=RegistrySet('HKEY_current_user\software\odbc\odbc.ini\handan','DataBaseName',RegString!,'handan')
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=handan;databasename=handan;databasefile='+db_path
sqlca.dbms='odbc'
sqlca.database='handan'
sqlca.dbparm="connectstring='"+odbcstr+";uid=handan;pwd=handan'"
connect using sqlca;
open(kaishi)
...全文
428 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsypenghong 2005-01-22
  • 打赏
  • 举报
回复
bup
hygougou 2005-01-16
  • 打赏
  • 举报
回复
这个是别人写的,就那么简单几句
-----------------------------------------------------------------------
他这个程序还没有加引擎驱动,如果不能运行也加上
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Adaptive Server Anywhere 7.0]
"Driver"="e:\\yourpath\\dbodbc7.dll"
"Setup"="e:\\yourpath\\dbodbc7.dll"

注意是要双斜线,我才看到你好象是这个问题
-----------------------------------------------------------------------
//以下是往注册表里写数据源信息,我为了省事直接就把路径固定了
//如果要做通用程序可以定义一个获取当前应用程序所在目录路径的API函数
//这样把路径放到as_path就OK啦!!!

string ls_key,ls_key1,as_odbc_name,as_path

as_odbc_name='ylgl'
as_path='c:\'+as_odbc_name+'\'
ls_key = 'HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\'+as_odbc_name
ls_key1 = 'HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources'

Registryset(ls_key,'Driver',as_path+"DBODBC7.DLL")
Registryset(ls_key,'UID',"DBA")
Registryset(ls_key,'PWD',"SQL")
Registryset(ls_key,'Integrated',"No")
Registryset(ls_key,'Start',as_path+'dbeng7')
Registryset(ls_key,'DatabaseFile',as_path+as_odbc_name+'.DB')
Registryset(ls_key,'DatabaseName',as_odbc_name)
Registryset(ls_key,'AutoStop',"Yes")
Registryset(ls_key1,as_odbc_name,"Adaptive Server Anywhere 7.0")


messagebox('提示','数据源配置完成!')
霖湘凝 2005-01-16
  • 打赏
  • 举报
回复
hygougou(狗狗) 能不能给我看看具体我哪个究竟缺什么啊,
我确实现在看的糊涂了,谢谢~
hygougou 2005-01-16
  • 打赏
  • 举报
回复
你的注册表注册没有完全了
--------ODBC数据源配置。
在包含以上文件之后,还必需对使用ODBC数据库方式的应用进行ODBC数据源的配置,以便在安装完毕后应用程序可以直接访问用户数据源。
下面以使用SQL Anywhere 5.0数据库创建的用户数据库为例来说明如何使用数据源管理器进行ODBC的手工配置及如何在安装程序中自动修改系统注册表,其他数据库可以参考SQL Anywhere 5.0进行操作。

1.使用数据源管理器配置用户数据源。
1.1. 安装SQL Anywhere数据库驱动程序,使数据源管理器中的"ODBC驱动程序"页增加一行SQL Anywhere的驱动说明。
1.2. 在"用户DSN"一页选择"添加",然后选择SQL Anywhere数据源,出现数据源的配置信息表后,将数据源名(Data Source Name),数据库名(Database File),用户ID号(User ID),用户密码(Password)等信息添齐,选择"OK"确认,此时在"用户数据源"的窗口中就会增加用户的数据库的ODBC驱动,选择"确认"后退出数据源管理器。

进行以上两步以后重新启动系统,用户就可以在运行应用程序后使用SQL Anywhere数据库。
2. 修改系统注册表配置用户数据源。
(以下注:C:\YourApp为用户应用程序目录,C:\YourApp\Sqlany50为应用程序包含的SQL Anywhere数据库驱动文件目录,YourDB.DB为用户数据库。)

在HKEY_LOCAL_MACHINE\software\ODBC\ODBC Drivers下,增加字符串键值:
Sybase SQL Anywhere 5.0 = "Installed"

在HKEY_LOCAL_MACHINE\software\ODBC\Sybase SQL Anywhere 5.0下,增加字符串键值:
Driver = "C:\YourApp\Sqlany50\WOD50T.DLL"
Setup = "C:\YourApp\Sqlany50\WOD50T.DLL"

在HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Source下,增加字符串键值:
TestDB = "Sybase SQL Anywhere 5.0"

在HKEY_CURRENT_USER\Software\ODBC\ODBC.INI下,增加主键:TestDB,并分别加入键值如下:
Autostop = "yes"
Databasefile = "C:\YourApp\YourDB.DB
Databasename = "TestDB"
Driver = "C:\YourApp\Sqlany50\WOD50T.DLL"
PWD = "sql"
Start = "C:\YourApp\Sqlany50\dbeng50.exe -d -c1024 -Q"
UID = "dba"

在用户的安装程序中将以上步骤加入,可以使用户的应用程序在不必安装SQL Anywhere数据库驱动下,也能直接访问用户数据源,从而实现用户应用程序的独立发布。

integer rc
string ls_dir,is_dbfile,is_datasource
ulong ls_buf
is_datasource="graduate"
ls_buf=256
ls_dir=space(ls_buf)
GetCurrentdirectoryA(ls_buf,ls_dir)
is_dbfile=ls_dir+'\graduate.db'
rc=profileint("first.ini","start","first",0)

if rc=1 then
if RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+"Adaptive Server Anywhere 7.0","Driver",RegString!,"dbodbc7.dll")=1 then
messagebox("恭喜你","数据源已注册成功!")
end if
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+"Adaptive Server Anywhere 7.0","Setup",RegString!,"dbodbc7.dll")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources","graduate",RegString!,"Adaptive Server Anywhere 7.0")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"Driver",RegString!,"dbodbc7.dll")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"UID",RegString!,"dba")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"PWD",RegString!,"sql")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"DatabaseFile",RegString!,is_dbfile)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"AutoStop",RegString!,"Yes")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"Integrated",RegString!,"No")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"DatabaseName",RegString!,"graduate.db")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"Debug",RegString!,"No")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+is_datasource,"DisableMultiRowFetch",RegString!,"No")
setprofilestring("first.ini","start","first","0")
end if

只需要把datasource等几个地方改一下就可以了
其中的graduate是我的数据库名
if RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+"Adaptive Server Anywhere 7.0","Driver",RegString!,"dbodbc7.dll")=1
这一句就是driver的配置

上述连接为代码实现,下面的是由打包程序实现的注册表项
有两中连接
1.本地连接
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ASA 8.0 Sample]
"Driver"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\win32\\dbodbc8.dll"
"Description"="Adaptive Server Anywhere Sample Database"
"UID"="dba"
"PWD"="sql"
"EngineName"="asademo8"
"DatabaseFile"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\asademo.db"
"Start"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\win32\\dbeng8.exe -c 8m"
"AutoStop"="yes"
START项有许多参数,“-C 8M”设置初始高速缓存大小8M,一般建议64M。“-Q”安静模式 — 取消输出,就是系统拖盘中不显示数据库引擎图表。‘-D’禁用异步 I/O [Windows NT 、NetWare]。‘-M’对于所有数据库,在每个检查点之后截断事务日志。

2.网络连接

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ASA 8.0 Client Sample]
"Driver"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\win32\\dbodbc8.dll"
"Description"="Adaptive Server Anywhere Sample Client"
"UID"="dba"
"PWD"="sql"
"EngineName"="asademo8"
"CommLinks"="TCPIP{}"
"AutoStop"="yes"

注意:如果你要在WINDOWS的ODBC中看到的分发的数据库,还要以下的信息
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]
"ASA 8.0 Client Sample"="Adaptive Server Anywhere 8.0"(网络连接)
"ASA 8.0 Sample"="Adaptive Server Anywhere 8.0"(本地连接)

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0]
"Driver"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\win32\\dbodbc8.dll"
"Setup"="C:\\Program Files\\Sybase\\SQL Anywhere 8\\win32\\dbodbc8.dll"
该注册项为你分发DLL的实际路径。

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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