MS Access 2003在VBA中刷新链接的ODBC表导致Bloat

问题描述:

使用以下代码时,刷新链接的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 

我已经搜索并搜索了压缩和修复之外的分辨率。有人可以向我解释为什么在这段代码中发生膨胀并且速度如此之快?还有另外一种方法可以完成我需要做的事吗?

我感谢您的帮助。

感谢, 卡拉

这里有一些可能性:

  • 忽略的膨胀。它是如此极端?什么是修理&紧凑不好?
  • 只更改.ConnectRefreshLinkqryWarranty02中使用的表格,而不是全部11个表格。
  • qryWarranty02创建SQL Server视图,链接该视图。现在你只需切换一个TableDef。
  • 使用传递查询而不是链接的视图。我不认为改变PT查询的.Connect会导致与表格相同的膨胀。
  • 对4个数据库使用固定连接字符串进行4次传递查询,并遍历它们。没有切换(但在查询冗余)。
+0

膨胀太过激烈了,所有需要完成的流程都无法在其中间关闭。创建/使用传递查询完美地解决了这个问题。谢谢你的帮助! – cdohn

这是正常的和已知的(错误的)行为。

除了忽略膨胀(您可以安全地进行)或之后执行压缩之外,您没有其他选择。