如何在程序运行期间建立ODBC数据源,求救!!! ( 积分: 80 )

J

jzg007

Unregistered / Unconfirmed
GUEST, unregistred user!
最近参考别人的程序,发觉动态建立ODBC数据源此功能特别适用,但我在程序调试过程中出现了一些问题,还请各位前辈指教。我的程序如下:<br>procedure&nbsp;TForm1.FormShow(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;Reg:TRegistry;<br>&nbsp;&nbsp;pathdrive,pathsystem:String;<br>&nbsp;&nbsp;list:TStringList;<br>&nbsp;&nbsp;n_flg:integer&nbsp;;<br>&nbsp;&nbsp;SysDir:array[&nbsp;0..255&nbsp;]&nbsp;of&nbsp;char;<br>begin<br>&nbsp;&nbsp;Reg:=TRegistry.Create;&nbsp;//建立一个Registry实例<br>&nbsp;&nbsp;list:=TStringlist.Create;<br>&nbsp;&nbsp;Session.GetAliasNames(list);<br>&nbsp;&nbsp;if&nbsp;(list.IndexOf('test')=-1)&nbsp;&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;n_flg:=messagebox(0,'测试数据库别名不存,现在创建吗(y/n)','提示信息',4)&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;n_flg=IDYES&nbsp;THEN<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Reg&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pathdrive:=GetCurrentDir()+'/Data/Data_h.mdb';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetSystemDirectory(SysDir,255);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pathsystem:=SysDir+'/odbcjt32.dll';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//showmessage(pathdrive);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//showmessage(pathsystem);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到Software/ODBC/ODBC.INI/ODBC&nbsp;Data&nbsp;Sources<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;OpenKey('Software/ODBC/ODBC.INI/ODBC&nbsp;Data&nbsp;Sources',True)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString('test','Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin//创建键值失败<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messagebox(0,'增加ODBC数据源失败','提示信息',0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseKey;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到或创建Software/ODBC/ODBC.INI/test,写入DSN配置信息<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;OpenKey('Software/ODBC/ODBC.INI/test',True)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString(&nbsp;'DBQ',pathdrive);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据库目录<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString(&nbsp;'Driver',pathsystem);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//驱动程序DLL文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString(&nbsp;'FIL',&nbsp;'MS&nbsp;Access;');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Filter依据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInteger(&nbsp;'DriverId',&nbsp;25);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Filter依据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString(&nbsp;'Trusted_Connection',&nbsp;'Yes');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//支持的事务操作数目<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInteger(&nbsp;'SafeTransactions',&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Filter依据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteString(&nbsp;'UID',&nbsp;'');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//支持的事务操作数目<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseKey;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reg.Free;<br>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;list.Free;<br>&nbsp;&nbsp;end&nbsp;;<br><br>end;<br><br>end.<br>程序运行后:建立的数据源别名在ODBC的DNS配置信息中存在;同时也写进的相应的注册表中。内容如下:<br>Windows&nbsp;Registry&nbsp;Editor&nbsp;Version&nbsp;5.00<br><br>[HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBC.INI/test]<br>&quot;DBQ&quot;=&quot;E://心路历程之-程序//delphi7//练习//动态生成数据源//Data//Data_h.mdb&quot;<br>&quot;Driver&quot;=&quot;C://WINNT//system32//odbcjt32.dll&quot;<br>&quot;FIL&quot;=&quot;MS&nbsp;Access;&quot;<br>&quot;DriverId&quot;=dword:00000019<br>&quot;Trusted_Connection&quot;=&quot;Yes&quot;<br>&quot;SafeTransactions&quot;=dword:00000000<br>&quot;UID&quot;=&quot;&quot;<br>现在的问题是,进入ODBC数据源的DNS配置页,选择新建立的TEST数据源,发觉次数据源的“数据库”为空?没有具体的路径信息???但注册表中怎么有详细的路径信息?<br>困惑许久,希望会的前辈给予帮助。谢谢!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
450
import
I
顶部