设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1877|回复: 1
打印 上一主题 下一主题

[模块/函数] 动态新增、移除ODBC DSN

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-30 13:14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望高手帮忙把以下代码修改成 FOXPRO ODBC DNS文件,谢谢!

文章来源: http://www.accessoft.com/article-show.asp?id=1745

一般我们建立 Client 端 DSN 都是在使用者的机器上进入【控制台】【ODBC 资料来源管理员】去建立,但是如果我们开发的 APP 使用者很多时,这就有点累人了,所以我们可以将这个动作放在程序中!

新增 DSN 的方法有二种:
1、使用 DBEngine 物件的 RegisterDatabase 方法
2、呼叫 SQLConfigDataSource API

不管使用以上任何一种方法新增 DSN,一共会写入二个地方,一个是注册表,一个是 ODBC.INI。

而删除 DSN 的方法同上面的第二种方法,呼叫 SQLConfigDataSource API。

以下之模组以 Oracle73 Ver 2.5 为例,在 Form 的声明区中加入以下声明及模组:

Private Const ODBC_ADD_DSN = 1 ′ Add data source
Private Const ODBC_CONFIG_DSN = 2 ′ Configure (edit) data source
Private Const ODBC_REMOVE_DSN = 3 ′ Remove data source
Private Const vbAPINull As Long = 0& ′ NULL Pointer

Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _
(ByVal hwndParent As Long, ByVal fRequest As Long, _
ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long

Public Sub CreateDSN(sDSN As String)
Dim nRet As Long
Dim sDriver As String
Dim sAttributes As String
sDriver = "Oracle73 Ver 2.5"
sAttributes = "Server=Oracle8" & Chr$(0)
sAttributes = sAttributes & "DESCRIPTION=" & sDSN & Chr$(0)
′sAttributes = sAttributes & "DSN=" & sDSN & Chr$(0)
sAttributes = sAttributes & "DATABASE=DBFinance" & Chr$(0)
sAttributes = sAttributes & "Userid=Scott" & Chr$(0)
′sAttributes = sAttributes & "PWD=myPassword" & Chr$(0)
DBEngine.RegisterDatabase sDSN, sDriver, True, sAttributes ′注一
′nRet = SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, sDriver, sAttributes) ′注二
End Sub

Public Sub DeleteDSN(sDSN As String)
Dim nRet As Long
Dim sDriver As String
Dim sAttributes As String
sDriver = "Oracle73 Ver 2.5"
sAttributes = sAttributes & "DSN=" & sDSN & Chr$(0)
nRet = SQLConfigDataSource(vbAPINull, ODBC_REMOVE_DSN, sDriver, sAttributes)
End Sub

′假设要产生的 DSN 为 Test,实际使用范例如下:

Private Sub Command1_Click()
CreateDSN "Test"
End Sub

Private Sub Command2_Click()
DeleteDSN "Test"
End Sub

′而写到系统的资料如下:

1、ODBC.INI

[ODBC 32 bit Data Sources]
Test=Oracle73 Ver 2.5 (32 bit)

[Test]
Driver32=C:\ORAWIN95\ODBC250\sqo32_73.dll

2、注册表

机码:HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources
名称:Test 资料:Oracle73 Ver 2.5

机码:HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Test
名称:Description 资料:Test
名称:Driver 资料:C:\ORAWIN95\ODBC250\sqo32_73.dll
名称:Server 资料:Oracle8
名称:UserId 资料:Scott
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2013-3-30 14:07:19 | 只看该作者
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-22 07:06 , Processed in 0.100765 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表