设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 发一个好用的DNS创建模块给大家用

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-29 18:08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我感觉挺好用的,喜欢的就收下吧,当是新年礼物


  1. '*********************** Code Start ***************************
  2. ' 也可以通过域名解析给出域名

  3. ' 定义注册表API函数
  4. Private Declare Function RegEnumKeyEx Lib "advapi32.dll" _
  5.                                       Alias "RegEnumKeyExA" _
  6.                                       (ByVal hKey As Long, _
  7.                                        ByVal dwIndex As Long, _
  8.                                        ByVal lpName As String, _
  9.                                        lpcbName As Long, _
  10.                                        ByVal lpReserved As Long, _
  11.                                        ByVal lpClass As String, _
  12.                                        lpcbClass As Long, _
  13.                                        ByVal lpftLastWriteTime As String) As Long

  14. Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
  15.                                       Alias "RegOpenKeyExA" _
  16.                                       (ByVal hKey As Long, _
  17.                                        ByVal lpSubKey As String, _
  18.                                        ByVal ulOptions As Long, _
  19.                                        ByVal samDesired As Long, phkResult As Long) As Long

  20. Private Declare Function RegCloseKey Lib "advapi32.dll" _
  21.                                      (ByVal hKey As Long) As Long

  22. Const HKEY_LOCAL_MACHINE = &H80000002

  23. Const ERROR_SUCCESS = 0&
  24. Const SYNCHRONIZE = &H100000
  25. Const STANDARD_RIGHTS_READ = &H20000
  26. Const STANDARD_RIGHTS_WRITE = &H20000
  27. Const STANDARD_RIGHTS_EXECUTE = &H20000
  28. Const STANDARD_RIGHTS_REQUIRED = &HF0000
  29. Const STANDARD_RIGHTS_ALL = &H1F0000
  30. Const KEY_QUERY_value = &H1
  31. Const KEY_SET_value = &H2
  32. Const KEY_CREATE_SUB_KEY = &H4
  33. Const KEY_ENUMERATE_SUB_KEYS = &H8
  34. Const KEY_NOTIFY = &H10
  35. Const KEY_CREATE_LINK = &H20
  36. Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
  37.                    KEY_QUERY_value Or _
  38.                    KEY_ENUMERATE_SUB_KEYS Or _
  39.                    KEY_NOTIFY) And _
  40.                   (Not SYNCHRONIZE))

  41. Const REG_DWORD = 4
  42. Const REG_BINARY = 3
  43. Const REG_SZ = 1

  44. Const ODBC_ADD_SYS_DSN = 4

  45. Private Declare Function SQLConfigDataSource Lib "odbccp32.dll" _
  46.                                              (ByVal hwndParent As Long, _
  47.                                               ByVal fRequest As Integer, _
  48.                                               ByVal lpszDriver As String, _
  49.                                               ByVal lpszAttributes As String) As Long

  50. Function Check_SDSN(ByVal JDS_Server_name As String, ByVal jds_dsn_name As String, ByVal SQLData As String)

  51. ' 查看我们要的系统数据源(DSN)是否存在。
  52. ' 如果存在,正好;否则,我们就创建一个。

  53.     Dim lngKeyHandle As Long
  54.     Dim lngResult As Long
  55.     Dim lngCurIdx As Long
  56.     Dim strvalue As String
  57.     Dim classvalue As String
  58.     Dim timevalue As String
  59.     Dim lngvalueLen As Long
  60.     Dim classlngvalueLen As Long
  61.     Dim lngData As Long
  62.     Dim lngDataLen As Long
  63.     Dim strResult As String
  64.     Dim DSNfound As Long
  65.     Dim syscmdresult As Long

  66.     syscmdresult = SysCmd(acSysCmdSetStatus, "查找系统DSN: " & jds_dsn_name & " …")

  67.     ' 打开包含系统数据源(DSN)的注册表主键。

  68.     lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
  69.                              "SOFTWARE\ODBC\ODBC.INI", _
  70.                              0&, _
  71.                              KEY_READ, _
  72.                              lngKeyHandle)

  73.     If lngResult <> ERROR_SUCCESS Then
  74.         MsgBox "错误: 不能打开注册键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI." & _
  75.                vbCrLf & vbCrLf & _
  76.                "请安装SQL Server的ODBC驱动程序用以调用MDTS系统数据源。" & _
  77.                vbCrLf & _
  78.                "要获得更多的信息,请与管理员联系。"
  79.         syscmdresult = SysCmd(acSysCmdClearStatus)
  80.         Check_SDSN = -1
  81.     End If

  82.     ' 现在这个注册键是打开的,我们在这个查找看是否我们需要的。

  83.     lngCurIdx = 0
  84.     DSNfound = False

  85.     Do
  86.         lngvalueLen = 512
  87.         classlngvalueLen = 512
  88.         strvalue = String(lngvalueLen, 0)
  89.         classvalue = String(classlngvalueLen, 0)
  90.         timevalue = String(lngvalueLen, 0)
  91.         lngDataLen = 512

  92.         lngResult = RegEnumKeyEx(lngKeyHandle, _
  93.                                  lngCurIdx, _
  94.                                  strvalue, _
  95.                                  lngvalueLen, _
  96.                                  0&, _
  97.                                  classvalue, _
  98.                                  classlngvalueLen, _
  99.                                  timevalue)
  100.         lngCurIdx = lngCurIdx + 1

  101.         If lngResult = ERROR_SUCCESS Then

  102.             ' 是我们要的系统数据源吗?

  103.             If strvalue = jds_dsn_name Then

  104.                 ' 是! 那就不需要我们再做什么了。

  105.                 DSNfound = True
  106.                 syscmdresult = SysCmd(acSysCmdClearStatus)

  107.             End If

  108.         End If

  109.     Loop While lngResult = ERROR_SUCCESS And Not DSNfound

  110.     Call RegCloseKey(lngKeyHandle)

  111.     If Not DSNfound Then

  112.         ' 我们所需的系统数据源不存在,因此,我们试着创建一个。

  113.         syscmdresult = SysCmd(acSysCmdSetStatus, "创建系统数据源DSN: " & jds_dsn_name & "…")

  114.         lngResult = SQLConfigDataSource(0, _
  115.                                         ODBC_ADD_SYS_DSN, _
  116.                                         "SQL Server", _
  117.                                         "DSN=" & jds_dsn_name & Chr(0) & _
  118.                                         "Server=" & JDS_Server_name & Chr(0) & _
  119.                                         "Database=" & SQLData & "" & Chr(0) & _
  120.                                         "UseProcForPrepare=Yes" & Chr(0) & _
  121.                                         "Description=MDTS Database" & Chr(0) & Chr(0))

  122.         If lngResult = False Then

  123.             MsgBox "错误: 不能创建系统数据源DSN: " & jds_dsn_name & "." & _
  124.                    vbCrLf & vbCrLf & _
  125.                    "请确认已安装了SQL Server的ODBC驱动程序。" & _
  126.                    vbCrLf & _
  127.                    "需要更的有关MDTS的信息,请与系统管理员联系。"

  128.             syscmdresult = SysCmd(acSysCmdClearStatus)
  129.             Check_SDSN = -1

  130.         End If

  131.     End If

  132.     syscmdresult = SysCmd(acSysCmdClearStatus)
  133.     Check_SDSN = 0

  134. End Function


复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-1-29 20:14:46 | 只看该作者
好东西.收藏了.
3#
发表于 2012-1-30 11:54:38 | 只看该作者
能配一个示例  更好
4#
发表于 2012-1-30 14:55:17 | 只看该作者
同意楼上的说法!

点击这里给我发消息

5#
发表于 2012-1-30 15:14:33 | 只看该作者
学习,好东西!
6#
发表于 2012-1-30 21:24:40 | 只看该作者
这个模块的功能是啥呢,我没有看懂呢,这个数据源是指啥,是数据库后台文件,还是什么呢?为啥要注册呢?
7#
发表于 2012-2-5 11:01:28 | 只看该作者
能配一个示例  更好!
8#
发表于 2012-2-5 12:42:50 | 只看该作者
先收了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 17:58 , Processed in 0.091404 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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