2012-03-10 81 views
0

我有一个应用程序在通过无线网络访问MDB数据库时遇到问题。如何创建从MDB到SQL Server的链接表

快速解决方案是在所有将其所有表连接到SQL Server数据库的工作站上有一个本地MDB文件吗?

这是一种避免必须重新编写应用程序中的所有数据访问代码的方法吗?

+0

你能描述你所遇到的问题?也许发布您的数据访问代码的例子?我们在谈论多少个工作站?是否有其他原因转移到SQL Server? – XIVSolutions 2012-03-10 13:01:09

+0

访问的网络性能从来没有很好,通过WIFI可能是一个永无止境的头痛来源,我认为你总是最好给每个用户一个本地副本。 – 2012-03-10 17:11:08

+0

@Matt:如果每个用户都有本地副本,那么他们将如何共享数据库? – CJ7 2012-03-10 22:34:54

回答

1

是的,这样做会很好。我们有许多用这种方式连接的客户。
然而,这不是一件容易的事。不确定是否所有的努力都会为自己付出代价。
而且您还有一些新的维护和部署问题。

遵循的步骤是这样的:

1)迁移你的表到SQLServer的
2)创建ODBC数据源将被用于连接到后端数据库
3)连接您的表
4)重命名您的连接表以删除模式限定符(例如“dbo_”),以便您的链接表具有与以前相同的名称。

现在该是测试所有代码的时候了。
希望你不必重写任何东西。

真正的问题在于您需要创建与原始ODBC数据源相匹配的客户端PC。另外,如果您重新分配前端数据库,则可能需要重新连接来自客户端PC的所有表。 你需要调用这样的功能:

Public Function UpdateODBCTables() As Boolean 

    On Error GoTo Exit_On_Error 
    Dim dbs As DAO.Database 
    Dim tdf As DAO.TableDef 
    Dim sDSN As String 
    Dim sDB As String 
    Dim sComputer As String 
    Dim sDesc As String 
    Dim sApp As String 
    Dim strConnect As String 

    sDSN = "YOUR_DSN_NAME" 
    sDB = "YOUR_DATABASE_NAME" 
    sComputer = "YOUR_COMPUTER_NAME" 
    sApp = "YOUR_APP_NAME" 
    sDesc = "DESCRIPTION_OF_YOUR_APP" 

    strConnect = "ODBC;DSN=" & sDSN & ";" & _ 
       "DATABASE=" & sDB & ";" & _ 
       "WSID=" & sComputer & ";" & _ 
       "TrustedConnection=Yes;" & _ 
       "Description=" & sDesc & ";" & _ 
       "APP=" & sApp ";" 
    Set dbs = CurrentDb 
    ' Loop over tabledefs of ODBC type and reconnect 
    For Each tdf In dbs.TableDefs 
     If tdf.Connect <> "" And Left(tdf.Connect, 4) = "ODBC" And Left(tdf.Name, 1) <> "~" Then 
      tdf.Connect = strConnect 
      tdf.RefreshLink 
     End If 
    Next 
    dbs.TableDefs.Refresh 
    UpdateODBCTables = True 

Exit_On_Return: 
    Set dbs = Nothing 
    Exit Function 

Exit_On_Error: 
    MsgBox Err.Description, vbCritical, "YOUR_MESSAGE_TITLE" 
    Resume Exit_On_Return 
End Function 
+0

你是如何处理将整个表格拖到客户端的查询问题的?在较大的数据库上,这不会成为性能的杀手吗? – CJ7 2012-03-11 02:22:11

+0

即使在数据文件位于网络共享文件夹中使用文件共享时,访问也不会通过网络拉动整个表。因此,在18年以上的历史中,只要索引可供使用,Access数据引擎从不会在整个网络上拉动整个表。因此,从一百万行中拉出一个客户记录意味着只有一条记录从网络管道传出,如果后端数据文件被SQL服务器取代,这也是正确的。整个桌子的想法是由那些对JET(现在称为ACE)数据引擎如何运作知之甚少的人所犯下的都市神话。 – 2012-03-11 05:11:19

+0

问题是'将整个表格拖到客户端的查询'。如果是这样,正如@kallal所说,切换到SQLServer是毫无意义的。在这种情况下,您肯定应该重写您的代码。 – Steve 2012-03-11 09:29:11

相关问题