在线提问(高分)急

tieqing 2002-09-03 12:28:58
integer odbc_init
string pathname,dda

open(w_qidong)
dda="hkey_current_user\software\odbc\odbc.ini\danji"
pathname=getcurrentdirectory()
pathname=pathname

odbc_init=profileint("system.ini","start","first",1)
messagebox("",odbc_init)
if odbc_init=1 then
messagebox("","kkk")
registryset("hkey_current_user\software\odbc\odbc.ini\odbc data sources","danji",regstring!,"adaptive server anywhere 7.0")
registryset(dda,"","")
registryset(dda,"databasefile",regstring!,pathname+"\cj.db")
registryset(dda,"databasename",regstring!,"cj")
registryset(dda,"driver",regstring!,pathname+"\dbodbc7.dll")
registryset(dda,"pwd",regstring!,"sql")
registryset(dda,"uid",regstring!,"dba")
registryset(dda,"autostop",regstring!,"yes")
registryset(dda,"debug",regstring!,"no")
registryset(dda,"disablemultirowfetch",regstring!,"no")
registryset(dda,"integrated",regstring!,"no")
setprofilestring("system.ini","start","first","0")
//else
//open(w_main)
end if

//open(w_qidong)
本人在aplication中输入如上代码想要实现动态注册数据源,但总是失败,请高手指点
谢谢!
...全文
33 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
balloonman2002 2002-09-03
  • 打赏
  • 举报
回复
再COPY 一个关于ASA的ODBC动态创建:

Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7

answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC DRIVERS','Sybase SQL Anywhere 5.0',RegString!,'Installed')

IF answer=-1 THEN
Messagebox("错误","应用程序无法设置ODBC DRIVERS,系统将终止运行",StopSign!)
RETURN 0
END IF
//***********
string ls_path,ls_start,ls_driver,ls_databasefile,ls_ini,ls_trans,ls_dbeng
if Handle(GetApplication()) <> 0 then
//运行状态
//取路径
ls_path = Space (128)
GetModuleFileNameA (Handle (GetApplication ()), ls_path, 128)
// 调用此函数需要声明以下外部函数
// Get Runtime Path
// Function uLong GetModuleFileNameA(long hinstModule, Ref String lpszPath, uLong cchPath) Library "kernel32.dll"
//

// 该函数返回的是运行文件名(所以必须判断运行模式),需要自己找出路径
integer i
for i = len(ls_path) to 1 step -1
if mid(ls_path,i,1) = '\' then exit


next
ls_path = left(ls_path,i - 1)
ls_path = ls_path + '\'

end if
//messagebox('',ls_path)
ls_driver = ls_path + "WOD50T.DLL"
ls_trans = ls_path + "WTR50T.DLL"
ls_dbeng = ls_path + "dbeng50.exe"
ls_Start = ls_path + "dbeng50.exe -d -Q -c512"
ls_DatabaseFile = ls_path + "sys1.db"
//*************
answer1=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 0
END IF

answer=RegistrySet('HKEY_current_USER\Software\ODBC\ODBC.INI\ODBC Data Sources','sys1',RegString!,'Sybase SQL Anywhere 5.0')
IF answer=-1 THEN
Messagebox("错误","应用程序无法设置ODBC DATA SOURCE名称,系统将终止运行!",StopSign!)
RETURN 0
END IF

answer1=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','driver',RegString!,ls_driver)
answer2=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','start',RegString!,ls_Start)
answer3=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','autostop',RegString!,'yes')
answer4=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','DataBaseFile',RegString!,ls_DatabaseFile)
answer5=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','DataBaseName',RegString!,'sys1')
answer6=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','UID',RegString!,'dba')
answer7=RegistrySet('HKEY_current_USER\software\odbc\odbc.ini\sys1','PWD',RegString!,'sql')

IF answer1=-1 OR answer2=-1 OR answer3=-1 OR answer4=-1 OR answer5=-1 THEN
Messagebox('错误','应用程序无法设置ODBC.INI细节,系统将终止运行!',StopSign!)
RETURN 0
END IF


RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\sys1","Driver", RegString!, ls_driver)
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","AutoStop", RegString!, "yes")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","DatabaseFile", RegString!, ls_databasefile)
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","DatabaseName", RegString!, "sys1")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","Description", RegString!, "sys1")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","Driver", RegString!, "WOD50T.DLL")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","PWD", RegString!, "sql")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","Start", RegString!, ls_start)
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\sys1","UID", RegString!, "dba")



RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\ODBC Data Sources","sys1", RegString!, "Sybase SQL Anywhere 5.0")
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","Driver", RegString!, ls_driver)
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","uid", RegString!, "dba")
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","Start", RegString!, ls_start)
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","DatabaseFile", RegString!, ls_databasefile)
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","DatabaseName", RegString!, "sys1")
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","AutoStop", RegString!, "yes")
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","Description", RegString!, "sys1")
RegistrySet( "HKEY_USERS\.DEFAULT\Software\ODBC\ODBC.INI\sys1","PWD", RegString!, "sql")


RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Translators","Sybase SQL Anywhere 5.0 Translator", RegString!, "Installed")
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0 Translator","Driver", RegString!, ls_trans)
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0 Translator","Setup", RegString!, ls_trans)
RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0 Translator","Translator", RegString!, ls_trans)


RegistrySet( "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng50.exe","path", RegString!, ls_path)
RegistrySet( "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng50.exe","", RegString!, ls_dbeng)

return 1




hzhxxx 2002-09-03
  • 打赏
  • 举报
回复
对,我也碰到过, Set 不进,不知道是什么回事情!

使用 Win32 API ,解决了问题,我有时候也认为是蓝费!


//*****************************************************************//
//function : 在注册表中注册 sybase sql anywhere 6.0 数据源
//parameters :
// 1. as_dbname : 数据库文件名
// 2. as_login : 注册用户名
// 3. as_password : 对应密码
//return : (none)
//author : hzh
//date : 2002.4.26
//****************************************************************//


//注册表
//注册表相关
Constant long HKEY_CURRENT_USER = 2147483649
Constant long REG_SZ = 1 // Unicode nul terminated string
Constant long REG_BINARY = 3 //Free form binary
Constant long REG_DWORD = 4 // 32-bit number

Function long RegDeleteKey (long hKey,string lpSubKey) Library "advapi32.dll" Alias for "RegDeleteKeyA"
Function long RegCreateKey (long hKey,string lpSubKey,ref long phkResult) Library "advapi32.dll" Alias for "RegCreateKeyA"
Function long RegOpenKey (long hKey, string lpSubKey,ref long phkResult) Library "advapi32.dll" Alias for "RegOpenKeyA"
Function long RegCloseKey (long hKey)Library "advapi32.dll" Alias for "RegCloseKey"
Function long RegSetValue (long hKey,string lpSubKey,long dwType,string lpData, long cbData)Library "advapi32.dll" Alias for "RegSetValueA"
Function long RegSetValueEx(long hKey,string lpValueName,long Reserved,long dwType, string lpData, long cbData) Library "advapi32.dll" Alias for "RegSetValueExA"

long L_hskey,l_ret,l_hkey,l_length
string s_temp


l_ret = RegOpenKey(HKEY_CURRENT_USER,"SOFTWARE\ODBC\ODBC.INI\",l_hkey)
l_ret = RegCreateKey(l_hkey,as_dbname,l_hskey)
l_ret = RegCloseKey(l_hkey)

l_length = len(as_dbname)
l_ret = RegSetValueEx(l_hskey,"EngineName",0,REG_SZ,as_dbname,l_length)

s_temp = gs_apppath + as_dbname + ".db" //是你的 数据库文件路径
l_length = len(s_temp)
l_ret = RegSetValueEx(l_hskey,"DatabaseFile",0,REG_SZ,s_temp,l_length)

l_ret = RegSetValueEx(l_hskey,"PWD",0,REG_SZ,as_login,len(as_login))
l_ret = RegSetValueEx(l_hskey,"UID",0,REG_SZ,as_password,len(as_password))

s_temp = gs_apppath + "data\dbodbc6.dll"
l_length = len(s_temp)
l_ret = RegSetValueEx(l_hskey,"Driver",0,REG_SZ,s_temp,l_length)

s_temp = gs_apppath + "data\dbeng6.exe -m -c 2m"
l_length = len(s_temp)
l_ret = RegSetValueEx(l_hskey,"Start",0,REG_SZ,s_temp,l_length)

l_ret = RegCloseKey(l_hskey)


balloonman2002 2002-09-03
  • 打赏
  • 举报
回复
////********************************************************************************
//注册MYSQL-ODBC
//string ls_servername
//RegistryGet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
// "EngineName",RegString!,ls_servername)
//
//if (isnull(ls_servername) or trim(ls_servername)="") then

RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\ODBC Data Sources",&
"mysql_emotor",RegString!,"MySQL")

//RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
// "Database",RegString!,"myemotor")

//
RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
"Driver",RegString!,is_path+"dbeng\myodbc.dll")
RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
"Server",RegString!,"202.101.45.55")
RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
"Database",RegString!,"myemotor")
// //
//RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\emotor",&
// "EngineName",RegString!,"myemotor")


//RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
// "Database",RegString!,"myemotor")

//
//RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\mysql_emotor",&
// "Driver",RegString!,"C:\myodbc.dll")
//
// RegistrySet("HKEY_CURRENT_USER\software\odbc\odbc.ini\emotor",&
// "EngineName",RegString!,"server2")

//end if
//**********************************************************************
szpqq 2002-09-03
  • 打赏
  • 举报
回复
你可以,先在odbc里面增加一个数据源,然后在注册表中找到odbc下面该数据的所有信息,其实和你上面差不多,记下来后,一个个删除,看哪些是必须的,直至全部删完,然后运行程序,对注册表中写数据,看是否正确。慢慢调试,一定能搞定的
balloonman2002 2002-09-03
  • 打赏
  • 举报
回复
你的注册表中上述键值有没有写进去呢?
byfq 2002-09-03
  • 打赏
  • 举报
回复
提示什么?路径取的不对吧,自己调试下,
are2000 2002-09-03
  • 打赏
  • 举报
回复
每个registryset以后判断一下返回值
Returns 1 if it succeeds and -1 if an error occurs
看看是不是哪个registryset失败了。

1,108

社区成员

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

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