MS Access 2003刷新VBA中的链接ODBC表导致膨胀

时间:2015-10-26 21:34:01

标签: vba ms-access

使用以下代码,刷新链接的ODBC表连接时,数据库大小会膨胀。因此,如果不关闭并重新打开数据库以使其紧凑,用户将永远无法完全完成该过程。连接从SQL链接,数据库中有13个链接表。代码重置连接4次。

   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  

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

感谢您的帮助。

谢谢, 卡拉

2 个答案:

答案 0 :(得分:0)

以下是一些可能性:

  • 忽略臃肿。它是如此极端吗?维修和紧凑型有什么不好?
  • 仅更改.Connect中使用的表格RefreshLinkqryWarranty02,而不是所有11个表格。
  • qryWarranty02创建一个SQL Server视图,链接该视图。现在你只需要切换一个TableDef。
  • 使用Pass-Through查询而不是链接视图。我不认为更改PT查询的.Connect会导致与表格相同的膨胀。
  • 为4个数据库提供4个固定连接字符串的传递查询,并循环访问它们。不再切换(但查询中有冗余)。

答案 1 :(得分:0)

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

你没有其他选择,可以忽略膨胀(你可以安全地做)或者之后执行紧凑。