2012-03-10 58 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

相關問題