设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 1328|回复: 16
打印 上一主题 下一主题

[Access本身] 没人支招?采用这个代码链接ODBC链接有弊病,如何改?

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-14 08:49:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我采用以下代码通过ODBC链接后台数据库SQL,有个弊病就是使用者必须按照代码的用户和密码建立SQL数据库文件,不能随意.如果不要这段代码每次登录必须手工输入密码(未让记住用户名和密码),很烦.
请问如何改,急切盼望中.以下关键代码用红色标记.

Function Check_SDSN()
    ' 查看我们要的系统数据源(DSN)是否存在。
    ' 如果存在,正好;否则,我们就创建一个。
         
    Dim lngKeyHandle As Long
    Dim lngResult As Long
    Dim lngCurIdx As Long
    Dim strvalue As String
    Dim classvalue As String
    Dim timevalue As String
    Dim lngvalueLen As Long
    Dim classlngvalueLen As Long
    Dim lngData As Long
    Dim lngDataLen As Long
    Dim strResult As String
    Dim DSNfound As Long
    Dim syscmdresult As Long
    syscmdresult = SysCmd(acSysCmdSetStatus, "查找系统DSN: " & JDS_DSN_name & " ...")
         
    ' 打开包含系统数据源(DSN)的注册表主键。
         
    lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
                             "SOFTWARE\ODBC\ODBC.INI", _
                             0&, _
                             KEY_READ, _
                             lngKeyHandle)
    If lngResult <> ERROR_SUCCESS Then
        MsgBox "错误: 不能打开注册键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI." & _
               vbCrLf & vbCrLf & _
               "请安装SQL Server的ODBC驱动程序用以调用MDTS系统数据源。" & _
               vbCrLf & _
               "要获得更多的信息,请与管理员联系。"
        syscmdresult = SysCmd(acSysCmdClearStatus)
        Check_SDSN = -1
    End If
         
    ' 现在这个注册键是打开的,我们在这个查找看是否我们需要的。
    lngCurIdx = 0
    DSNfound = False
         
    Do
        lngvalueLen = 512
        classlngvalueLen = 512
        strvalue = String(lngvalueLen, 0)
        classvalue = String(classlngvalueLen, 0)
        timevalue = String(lngvalueLen, 0)
        lngDataLen = 512
        lngResult = RegEnumKeyEx(lngKeyHandle, _
                                 lngCurIdx, _
                                 strvalue, _
                                 lngvalueLen, _
                                 0&, _
                                 classvalue, _
                                 classlngvalueLen, _
                                 timevalue)
        lngCurIdx = lngCurIdx + 1
        If lngResult = ERROR_SUCCESS Then
         
            ' 是我们要的系统数据源吗?
         
            If strvalue = JDS_DSN_name Then
           
                ' 是! 那就不需要我们再做什么了。
            
                DSNfound = True
                syscmdresult = SysCmd(acSysCmdClearStatus)
               
                Dim db As Database
                Dim tbl As TableDef
                Set db = CurrentDb
                    For Each tbl In db.TableDefs
                     If tbl.Attributes = 536870912 Then
                         tbl.Connect =

"DSN=TLC;UID=SAWD=123456;WSID=;DATABASE=ABC;Network=WORKGROUP"
                         tbl.RefreshLink
                      End If
                    Next

            End If
           
        End If
    Loop While lngResult = ERROR_SUCCESS And Not DSNfound
         
    Call RegCloseKey(lngKeyHandle)
    If Not DSNfound Then
         
        MsgBox "请先创建ODBC数据源!", vbInformation, "提示"
             DoCmd.OpenForm "系统注册"
Exit Function
Else
DoCmd.Close , , acSaveYes
      DoCmd.OpenForm "主界面"
         End If
             syscmdresult = SysCmd(acSysCmdClearStatus)
    Check_SDSN = 0
End Function

[ 本帖最后由 sbsfhgl 于 2008-4-15 15:57 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
17#
 楼主| 发表于 2008-4-21 18:09:49 | 只看该作者
谢谢版主liwen的解答,看来目前只有采取这种办法了
16#
发表于 2008-4-21 10:57:49 | 只看该作者
ACCESS表本身的安全性差,但表中的字段你可以自定义加密,一般不通用的加密,很少会有人刻意去破解,并且表中字段你不让人估到表的用途,别人一般也想不到你加密的东西是作什么用的。
15#
 楼主| 发表于 2008-4-19 08:14:28 | 只看该作者
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
14#
 楼主| 发表于 2008-4-18 18:18:10 | 只看该作者
原帖由 liwen 于 2008-4-18 13:12 发表
用户“SA”密码一般默认为空,如果不是出于安全性考虑,一般都不会更改它,这样你密码设置为空就行了,但如果出于安全性考虑对此设置了密码,你就必须按设置的密码来更改你的程序。

你这里这个用户名密码你可不用 ...



用表来,但关键是ACCESS的表安全性太差。
13#
发表于 2008-4-18 13:12:56 | 只看该作者
用户“SA”密码一般默认为空,如果不是出于安全性考虑,一般都不会更改它,这样你密码设置为空就行了,但如果出于安全性考虑对此设置了密码,你就必须按设置的密码来更改你的程序。

你这里这个用户名密码你可不用固定的用户名和密码,而是用一个表来保存(是否要加密也看你的实际需要),用户可以设置这个登录的用户名和密码。(以你这个自动设置DSN,应该是你根据需要设置这个用户名和密码,只是不需更改代码而己)
12#
 楼主| 发表于 2008-4-18 12:55:51 | 只看该作者
。。。。。。。。。。。。。。。。。。
11#
 楼主| 发表于 2008-4-17 18:09:25 | 只看该作者
原帖由 canghua 于 2008-4-17 13:43 发表
帮你顶。。

感谢!
10#
发表于 2008-4-17 13:43:50 | 只看该作者
帮你顶。。
9#
 楼主| 发表于 2008-4-17 12:40:19 | 只看该作者
。。。。。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-11 04:14 , Processed in 0.143495 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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