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
我已经搜索并搜索了压缩和修复之外的分辨率。有人可以向我解释为什么在这段代码中发生膨胀并且速度如此之快?还有另外一种方法可以完成我需要做的事吗?
我感谢您的帮助。
感谢, 卡拉
答
这里有一些可能性:
- 忽略的膨胀。它是如此极端?什么是修理&紧凑不好?
- 只更改
.Connect
和RefreshLink
在qryWarranty02
中使用的表格,而不是全部11个表格。 - 从
qryWarranty02
创建SQL Server视图,链接该视图。现在你只需切换一个TableDef。 - 使用传递查询而不是链接的视图。我不认为改变PT查询的.Connect会导致与表格相同的膨胀。
- 对4个数据库使用固定连接字符串进行4次传递查询,并遍历它们。没有切换(但在查询冗余)。
答
这是正常的和已知的(错误的)行为。
除了忽略膨胀(您可以安全地进行)或之后执行压缩之外,您没有其他选择。
膨胀太过激烈了,所有需要完成的流程都无法在其中间关闭。创建/使用传递查询完美地解决了这个问题。谢谢你的帮助! – cdohn