使用以下代码,刷新链接的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
我搜索并搜索了压缩和修复之外的解决方案。有人可以向我解释为什么在这段代码中发生膨胀并且如此之快?还有另一种方法可以完成我需要做的事情吗?
感谢您的帮助。
谢谢, 卡拉
答案 0 :(得分:0)
以下是一些可能性:
.Connect
中使用的表格RefreshLink
和qryWarranty02
,而不是所有11个表格。qryWarranty02
创建一个SQL Server视图,链接该视图。现在你只需要切换一个TableDef。答案 1 :(得分:0)
这是正常且已知(错误)的行为。
你没有其他选择,可以忽略膨胀(你可以安全地做)或者之后执行紧凑。