Office中国论坛/Access中国论坛

标题: 未保存密码的链接表,打开了数据库连接仍然打不开 [打印本页]

作者: 老鬼    时间: 2017-2-28 14:26
标题: 未保存密码的链接表,打开了数据库连接仍然打不开
我用以下代码创建了后台是SQL SERVER的链接表,退出ACCESS(版本2010),再进去,该链接表因为没有保存密码,所以打不开:
  1. cnString = "ODBC;DRIVER={SQL Server};SERVER=" & dbServer & ";UID=" & dbUser & ";PWD=" & dbPwd & ";DATABASE=" & dbName
  2. Set tbl = db.CreateTableDef(tblName)
  3. tbl.Connect = cnString
  4. tbl.SourceTableName = tblName
  5. db.TableDefs.Append tbl
复制代码
然后我用以下代码打开数据库连接(ODBC连接字符串与上面的一样),连接打开了,理论上讲ODBC连接池应该是开了,链接表应该是可读写了,可是链接表仍然打不开,为什么?
  1. Set db = DBEngine.OpenDatabase("", False, False, cnString)
  2. db.Close
复制代码



作者: access新新新手    时间: 2017-2-28 14:36
本帖最后由 access新新新手 于 2017-2-28 14:37 编辑

目前我用的是用VB6打开access,然后在VB6里面刷新一下链接表,
这样就可以了,这样稍微安全一点。

如果直接打开access是用不了的,因为在链接的时候没有保存密码


作者: 老鬼    时间: 2017-2-28 14:44
access新新新手 发表于 2017-2-28 14:36
目前我用的是用VB6打开access,然后在VB6里面刷新一下链接表,
这样就可以了,这样稍微安全一点。

我是按下面这个帖子的想法做的,不知道有没有理解错:
http://www.office-cn.net/forum.p ... hlight=%B0%B2%C8%AB
作者: access新新新手    时间: 2017-2-28 14:50
本帖最后由 access新新新手 于 2017-2-28 15:05 编辑
老鬼 发表于 2017-2-28 14:44
我是按下面这个帖子的想法做的,不知道有没有理解错:
http://www.office-cn.net/forum.php?mod=viewthr ...

这个没有去研究,我现在是用vb6来打开数据(access)

access链接SQL Server数据,不要保存密码,这样相对安全一点

再用VB6打开access,打开后刷新一下,这样就链接好了。
还可以把要打开的数据库(access)的后缀改成其他的,比如.DLL都可以打开。
这样打开就是会闪一下才会显示登陆窗体,这个不知道怎么处理。

作者: 老鬼    时间: 2017-2-28 15:32
access新新新手 发表于 2017-2-28 14:50
这个没有去研究,我现在是用vb6来打开数据(access)

access链接SQL Server数据,不要保存密码,这样 ...

我试了刷新链接,还是不行,不知道为什么,刷新代码如下:
  1.     For Each tbl In db.TableDefs
  2.         If Left(tbl.Connect, 4) = "ODBC" Then
  3.             tbl.Connect = "ODBC;DRIVER={SQL Server};SERVER=" & dbServer & ";UID=" & dbUser & ";PWD=" & dbPwd & ";DATABASE=" & dbName
  4.             tbl.RefreshLink
  5.         End If
  6.     Next
复制代码

作者: access新新新手    时间: 2017-2-28 15:55
老鬼 发表于 2017-2-28 15:32
我试了刷新链接,还是不行,不知道为什么,刷新代码如下:

Public Function gf_LinkSqlServer() As Boolean
    On Error GoTo Err_LinkSqlServer
    Dim strConn As String, dbCurr As DAO.Database
    Dim tdf As Object
    Dim dbs As Object
    strConn = "ODBC;DRIVER=SQL Server;SERVER=IP,端口;DATABASE=sql数据库名;UID=saWD=密码"
    Set dbCurr = DBEngine.Workspaces(0).OpenDatabase("OfficeCn", False, False, strConn)
    Set dbs = CurrentDb
    For Each tdf In dbs.TableDefs
        If tdf.Connect <> "" Then
            tdf.Connect = strConn
            tdf.RefreshLink
        End If
    Next
    dbCurr.Close
    Set dbCurr = Nothing
    MsgBox "连接成功", vbInformation, "连接SQL Server"
    gf_LinkSqlServer = True
    Exit Function
Err_LinkSqlServer:
    Err.Clear
    MsgBox "连接出错!", vbCritical, "连接SQL Server"
    gf_LinkSqlServer = False
    DoCmd.Quit
End Function

作者: 老鬼    时间: 2017-2-28 16:03
access新新新手 发表于 2017-2-28 15:55
Public Function gf_LinkSqlServer() As Boolean
    On Error GoTo Err_LinkSqlServer
    Dim strCon ...

你的代码跟我的其实是一样的
作者: access新新新手    时间: 2017-2-28 16:10
老鬼 发表于 2017-2-28 16:03
你的代码跟我的其实是一样的

我的可以刷新,你的刷新不了?
和你的还是有点不一样

作者: access新新新手    时间: 2017-2-28 16:20
老鬼 发表于 2017-2-28 16:03
你的代码跟我的其实是一样的

链接SQLServer表
Sub 链接SQLServer表()
    Dim cnn As String
    Dim dbs As Object    'Database
    Dim tdf As Object    'DAO.TableDef
    Dim strConnect As String
    Dim arr As Variant
    Dim ar As String
    Dim i As Integer
    On Error GoTo errmsg
    ar = ("表1,表2,表3,表n")    '要链接的SQL Server数据库表名
    arr = Split(ar, ",")
    For i = LBound(arr) To UBound(arr)
        Set dbs = CurrentDb
        '下面是ODBC连接SQL字符串
        strConnect = "ODBC;DRIVER=SQL Server;SERVER=IP,端口;DATABASE=sql数据库名;UID=saWD=密码"
        Set tdf = dbs.CreateTableDef(arr(i))  '创建链接表,命名为arr(i)
        tdf.Connect = strConnect
        tdf.SourceTableName = arr(i)    'SQL源表
        dbs.TableDefs.Append tdf
        Set dbs = Nothing
        Set tdf = Nothing
        Application.RefreshDatabaseWindow  '刷新
    Next
    MsgBox "创建成功,请查看表"
    Exit Sub
errmsg:
    Set dbs = Nothing
    Set tdf = Nothing
    MsgBox Err.Description
End Sub

作者: tmtony    时间: 2017-2-28 16:42
可以哦,我就是access代码里写的刷新
作者: 老鬼    时间: 2017-3-1 15:37
问题解决了,是我画蛇添足的结果:DRIVER={SQL Server}改成DRIVER=SQL Server就行了
作者: access新新新手    时间: 2017-3-1 15:59
老鬼 发表于 2017-3-1 15:37
问题解决了,是我画蛇添足的结果:DRIVER={SQL Server}改成DRIVER=SQL Server就行了

是呀,你的代码和我的就是这里有区别。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3