Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

VBA代码如何更新ODBC链接(foxpro表)

杨生  发表于:2013-11-12 00:57:19  
复制

 请问,有个ODBC链接表,链接的是FOXPRO表,现ODBC改变设置了,VBA代码如何更新这个ODBC链接?“SourceDB=c:\somepath\mySourceDbFolder"路径改变了,不知道怎么更新已存在的链接表的链接信息?


因为数据源表(XX.DBF)搬到另一个地方了,我想在窗体上输入新的路径,按下更新按钮,就可以更新这个链接。请问是否可以实现?望高手指点。

 

Top
杨生 发表于:2013-11-13 20:48:00

找了一天,今天终于把这个问题解决了,网上找到的如下:


Private Sub Command3_Click()


    On Error GoTo ErrHandle
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim strCon As String
    Dim strBackEnd As String
    Dim strMsg As String
    Dim aaa As String
    Dim intErrorCount As Integer
    Set db = CurrentDb
    aaa = Me.patha
    
    For Each tdf In db.TableDefs
        If Left$(tdf.Connect, 4) = "ODBC" Then
            strCon = Nz(tdf.Connect, "")
            '     Debug.Print tdf.Connect
           strBackEnd = Right$(strCon, (Len(strCon) - (InStrRev(strCon, "SourceType") - 1)))
            ' 狦籓戈畐Τ
            '      Debug.Print strBackEnd


            If Len(strBackEnd & "") > 0 Then
                Set tdf = db.TableDefs(tdf.NAME)
                tdf.Connect = "ODBC;DSN=foxpro;SourceDB=" & aaa & ";" & strBackEnd
                tdf.RefreshLink
                '                DoCmd.RunSQL "Create UNIQUE  index hwck_sb on 123 ([sb_ym],[sb_no])"
            Else
                intErrorCount = intErrorCount + 1
                strMsg = strMsg & "Error getting back-end database name." & vbNewLine
                strMsg = strMsg & "Table Name: " & tdf.NAME & vbNewLine
                strMsg = strMsg & "Connect = " & strCon & vbNewLine
            End If
        End If
    Next tdf
ExitHere:
    On Error Resume Next
    If intErrorCount > 0 Then
        strMsg = "There were errors refreshing the table links: " _
               & vbNewLine & strMsg & "In Procedure RefreshTableLinks"
        RefreshTableLinks = strMsg
    End If
    Set tdf = Nothing
    Set db = Nothing
    Exit Sub
ErrHandle:
    intErrorCount = intErrorCount + 1
    strMsg = strMsg & "Error " & Err.Number & " " & Err.Description
    strMsg = strMsg & vbNewLine & "Table Name: " & tdf.NAME & vbNewLine
    strMsg = strMsg & "Connect = " & strCon & vbNewLine
    MsgBox strMsg, vbCritical
    Resume ExitHere


End Sub




麥田 发表于:2013-11-13 20:57:10
赶紧换sqlserver表吧

麥田 发表于:2013-11-13 21:00:16

附最新版教程

 

Access2003快速开发案例教程:
http://www.accessoft.com/article-show.asp?id=8796
Access2007快速开发案例教程:
http://www.accessoft.com/article-show.asp?id=8806
Access2010快速开发案例教程:
http://www.accessoft.com/article-show.asp?id=8810

 



总记录:3篇  页次:1/1 9 1 :