2015-10-26 136 views
1

使用以下代碼時,刷新鏈接的ODBC表連接時會膨脹數據庫大小。因此,如果不關閉並重新打開數據庫以使其壓縮,用戶將永遠無法完成該過程。連接從SQL鏈接,數據庫中有13個鏈接表。該代碼重置連接4次。MS Access 2003在VBA中刷新鏈接的ODBC表導致Bloat

Dim dbs As DAO.Database 
    Dim tdf As DAO.TableDef 
    Dim rs As DAO.Recordset 
    Dim strSite As String 

    Set dbs = CurrentDb 
    Set rs = dbs.OpenRecordset("tblSites") 

    'Run query against Default Site to create table 
    DoCmd.OpenQuery ("qryWarranty01") 'creates tblWarranty 

    'Loop through Site 2, Site 3 & Site 4 and append data to table 
    With rs 
     .MoveFirst 
     Do While .EOF = False 
     strSite = rs.Fields("Site") 
      For Each tdf In dbs.TableDefs 
       If Len(tdf.Connect) > 0 Then 
       tdf.Connect = "ODBC;DRIVER={SQL Server};SERVER=ServerName;DATABASE=" & strSite & ";UID=Username; PWD=Password;" 
       tdf.RefreshLink 
       End If 
      Next 
      DoCmd.OpenQuery "qryWarranty02" 'appends to tblWarranty 
     .MoveNext 
     Loop 
End With 
rs.Close 

'Reset tables to be linked to Default Site 
For Each tdf In dbs.TableDefs 
If Len(tdf.Connect) > 0 Then 
    tdf.Connect = "ODBC;DRIVER={SQL Server};SERVER=ServerName;DATABASE=Site1;UID=Username; PWD=Password;" 
    tdf.RefreshLink 
End If 
Next 

我已經搜索並搜索了壓縮和修復之外的分辨率。有人可以向我解釋爲什麼在這段代碼中發生膨脹並且速度如此之快?還有另外一種方法可以完成我需要做的事嗎?

我感謝您的幫助。

感謝, 卡拉

回答

0

這裏有一些可能性:

  • 忽略的膨脹。它是如此極端?什麼是修理&緊湊不好?
  • 只更改.ConnectRefreshLinkqryWarranty02中使用的表格,而不是全部11個表格。
  • qryWarranty02創建SQL Server視圖,鏈接該視圖。現在你只需切換一個TableDef。
  • 使用傳遞查詢而不是鏈接的視圖。我不認爲改變PT查詢的.Connect會導致與表格相同的膨脹。
  • 對4個數據庫使用固定連接字符串進行4次傳遞查詢,並遍歷它們。沒有切換(但在查詢冗餘)。
+0

膨脹太過激烈了,所有需要完成的流程都無法在其中間關閉。創建/使用傳遞查詢完美地解決了這個問題。謝謝你的幫助! – cdohn

0

這是正常的和已知的(錯誤的)行爲。

除了忽略膨脹(您可以安全地進行)或之後執行壓縮之外,您沒有其他選擇。